aunque PHP no admite la sobrecarga de método de la forma que ha experimentado en otros lenguajes, por ejemplo, Java. pero PUEDE tener sobrecarga de método en PHP, pero el método de definición es diferente. si usted quiere tener una funcionalidad diferente para un método dado, con un conjunto diferente de parámetros en PHP, puede hacer algo como esto:
class myClass {
public function overloadedMethod() {
// func_num_args() is a build-in function that returns an Integer.
// the number of parameters passed to the method.
if (func_num_args() > 1) {
$param1 = func_get_arg(0);
$param2 = func_get_arg(1);
$this->_overloadedMethodImplementation2($param1,$param2)
} else {
$param1 = func_get_arg(0);
$this->_overloadedMethodImplementation1($param1)
}
}
protected function _overloadedMethodImplementation1($param1) {
// code 1
}
protected function _overloadedMethodImplementation2($param1,$param2) {
// code 2
}
}
podría preverse una aplicación más limpia, pero esto es sólo una muestra.
PHP admite herencia e interfaces. para que pueda tener polimorfismo usándolos.usted puede tener una interfaz de la siguiente manera:
// file: MyBackupInterface.php
interface MyBackupInterface {
// saves the data on a reliable storage
public function saveData();
public function setData();
}
// file: myBackupAbstract.php
require_once 'MyBackupInterface.php';
class MyBackupAbstract implements MyBackupInterface {
protected $_data;
public function setData($data) {
$this->_data= $data;
}
// there is no abstract modifier in PHP. so le'ts avoid this class to be used in other ways
public function __construct() {
throw new Exception('this class is abstract. you can not instantiate it');
}
}
// file: BackupToDisk.php
require_once 'MyBackupAbstract.php';
class BackupToDisk extends MyBackupAbstract {
protected $_savePath;
// implement other methods ...
public function saveData() {
// file_put_contents() is a built-in function to save a string into a file.
file_put_contents($this->_savePath, $this->_data);
}
}
// file: BackupToWebService.php
require_once 'MyBackupAbstract.php';
class BackupToWebService extends MyBackupAbstract {
protected $_webService;
// implement other methods ...
public function saveData() {
// suppose sendData() is implemented in the class
$this->sendData($this->_data);
}
}
ahora en su aplicación, es posible utilizar de esta manera:
// file: saveMyData.php
// some code to populate $myData
$backupSolutions = array(new BackupToDisk('/tmp/backup') , new BackupToWebService('webserviceURL'));
foreach ($backupSolutions as $bs) {
$bs->setData($myData);
$bs->saveData();
}
tiene usted razón, PHP no es un lenguaje fuerte con tipo, nunca se menciona que cualquier de sus $ backupSolutions sería un 'MyBackupAbstract' o 'MyBackupInterface', pero eso no nos impediría tener la naturaleza del polimorfismo, que es una funcionalidad diferente a la de usar los mismos métodos.
"PHP admite el polimorfismo, pero tiene algunas limitaciones". Tada. :) –
gracias :) votó su respuesta. –
¿Por qué este lenguaje de preguntas es independiente? Me parece completamente sobre PHP. – beldaz