sergeiss
Цитата |
Ни в коем случае!!! Все "перегруженные" методы с одним названием относятся к одному классу. И, соответственно, к одному экземпляру одновременно. |
$Test = new Test();
$Test->display(['юху']); // принимает массив, возвращает результат
$Test->display (object $object) {
// как то на лету перегружаем метод
}
$Test->display((object)['юху']); // принимает объект
Цитата (Arh @ 10.11.2016 - 18:32) |
А как бы примерно это могло выглядеть на php? |
class StringBuilder {
public function append(StringBuilder $stringBuilder) {
$this->string += $stringBuilder->toString();
}
public function append(string $string) {
$this->string += $string;
}
}
$a = 1;
$a = 2;
class StringBuilder {
/*public function append(StringBuilder $stringBuilder) {
$this->string += $stringBuilder->toString();
}*/
public function append(string $string) {
$this->string += $string;
}
}
Цитата (Arh @ 10.11.2016 - 16:32) |
AllesKlar Да это не пример удобства, это пример как вызывать. Пример - это решение придуманной или реальной задачи. |
public function int max(int a, int b) {
return a > b ? a : b;
}
public function int max(int a, int b, int c) {
return max(max(a,b), c);
}
Цитата (Arh) |
Invis1ble Не понял. Типа как с переменными, новый код перезапишет старый? |
Цитата |
класс посмотрит на вызываемую функцию (имя, количество параметров и их типы) - это сигнатура функции. если у него есть подходящая сигнатура, то он вызовет ее. |
Цитата |
Это тоже самое, что спросить, зачем использовать молоток |
// PHP
setSomething( [ 'id' => 5] );
setSomething( [ 'first_name' => 'New name'] );
setSomething( [ 'first_name' => 'First name', 'last_name' => 'Last name'] );
// JS
doSomething( { id: 5 } );
doSomething( { first_name: 'New name' } );
doSomething( { first_name: 'First name', last_name: 'Last name' } );
class Test {
function get (...$arg) {
if (count($arg) == 1 && is_string($arg[0])) {
return $this->stringTest(...$arg);
} elseif (count($arg) == 1 && is_array($arg[0])) {
return $this->arrayTest(...$arg);
} elseif (count($arg) == 2 && is_array($arg[0]) && is_array($arg[1])) {
return $this->arraysTest(...$arg);
}
}
function stringTest (string $string) {
return 'строка';
}
function arrayTest (array $array) {
return 'массив';
}
function arraysTest (array $array1, array $array2) {
return 'два массива';
}
}
$Test = new Test();
print_r($Test->get('привет'));
print_r($Test->get([1]));
print_r($Test->get([1], [2]));