2014-12-31 3 views
0

Я из фона Java и в настоящее время изучаю PHP. Я читал о «переопределении метода» в PHP. Я не понимаю пример использования метода, переопределяющего PHP. В Java вся магия происходит во время выполнения, и мы можем использовать «переопределение метода» для «полиморфизма во время выполнения». В PHP это просто одно и то же имя функции (я знаю, что в PHP нет типа данных) в родительском и дочернем.Использование случая переопределения метода в PHP

Редактирование: Я хочу знать пример использования, например, в java. Я могу определить метод области в родительском классе, и во время выполнения он решает, нужно ли вычислять площадь квадрата или треугольника в зависимости от дочерней ссылки. Так на аналогичной строке Я ищу объяснения.

+0

http : //stackoverflow.com/questions/7394986/php-oop-method-overriding-the-dry-way? rq = 1 Я также ссылался на эту ссылку, и это помогло мне. Спасибо. – user3526905

+0

Поскольку у меня есть ответ и вопрос, на удержании, поэтому я должен его удалить? – user3526905

ответ

1

Я не уверен, что вы просите, но я думаю, что вы просто хотите php пример переопределения метода.

Случай Java, где, например, у вас есть родитель с двумя параметрами, и у вас есть дочерний элемент с дополнительным параметром, невозможно. Но возможно различная реализация одной и той же функции.

Так родитель

class parent 
{ 

    protected function doStuff() 
    { 
     echo 'parent stuff'; 
    } 
} 

и ребенок

class child extends parent 
{ 

    /** 
    * @overrides parent function 
    */ 
    protected function doStuff() 
    { 
     echo "child stuff"; 
    } 
} 

так это то, что у вас есть. Я не уверен, в какой части вы не поняли: у вас меньше вариантов в PHP, а затем в Java (поэтому запрещение функции переопределения aN с другим размером не допускается), вы не можете иметь 2 функции с разными значениями параметров в том же или в дочерние классы.

Но вы можете сделать это выше, если вам это нужно. Добавьте дополнительные шаги (например, дочерний элемент - это класс, в котором есть счетчик вызываемых функций, поэтому, помимо вызова родительского «doStuff», он может увеличивать внутренний счетчик. Это было бы случайным пользователем.

+0

Спасибо за ваш ответ, но я хочу знать пример использования, например в java I может определить метод области в родительском классе, и во время выполнения он решает, нужно ли вычислять площадь квадрата или треугольника в зависимости от ссылки на ребенка. Так что на подобной строке я ищу объяснение. – user3526905

+0

Вот что я вам дал – Nanne

+0

http://stackoverflow.com/questions/7394986/php-oop-method-overriding-the-dry-way?rq=1 Я также ссылался на эту ссылку и получил вашу мысль. Спасибо. – user3526905

0

Реализация переопределения в php очень проста. Если у вашего родительского класса есть функция. Вы можете создать функцию с тем же именем в вашем дочернем классе, чтобы переопределить функцию. Реализация переопределения не может быть достигнута путем создания 2 функций с тем же именем и разными аргументами в php. Потому что мы не можем создать одноименную функцию более одного раза в php-классе. Чтобы реализовать перегрузку, нам нужно использовать магический метод в php.

class testParent 
{ 
    public function f1() 
    { 
    echo 1; 
    } 
    public function f2() 
    { 
    echo 2; 
    } 
} 
class testChild 
{ 
    function f2($a) //overriding function f2 
    { 
    echo "$a"; 
    } 
} 
$a = new testChild(); 
$a->f2("Tushar");//it will print tushar 

Для переопределения встроенных функций в PHP вы можете использовать override_function

bool override_function (string $function_name , string $function_args , string $function_code) 
+0

Обратите внимание, что для переопределения_функции требуется [Advanced PHP Debugger (APD)] (http://php.net/manual/en/intro.apd.php), что не рекомендуется для производственная среда –

+0

@MarkBaker да, я знаю это ... но я написал это просто, чтобы показать ему варианты ... поскольку я не знаю, как автор OP будет его использовать. – Tushar

Смежные вопросы