Что вы подразумеваете в PHP под перегрузкой функций и переопределением функций. и в чем разница между ними обоими? не мог понять, в чем разница между ними.
php
overloading
overriding
Параг
источник
источник
Ответы:
Перегрузка - это определение функций, которые имеют похожие сигнатуры, но разные параметры. Переопределение применимо только к производным классам, где родительский класс определил метод, а производный класс желает переопределить этот метод.
В PHP вы можете перегружать методы только с помощью магического метода
__call
.Пример переопределения :
источник
__call
.Перегрузка функции происходит, когда вы определяете одно и то же имя функции дважды (или более) с использованием разных наборов параметров. Например:
В приведенном выше примере функция
compute
перегружена двумя разными сигнатурами параметров. * Это пока не поддерживается в PHP. Альтернативой является использование необязательных аргументов:Переопределение функции происходит, когда вы расширяете класс и переписываете функцию, которая существовала в родительском классе:
Например,
compute
переопределяет поведение, указанное вAddition
.источник
Subtraction
класс, расширяющийAddition
класс. :)Строго говоря, разницы нет, так как и вы не можете :)
Переопределение функции могло быть выполнено с помощью расширения PHP, такого как APD, но оно устарело, и последняя версия afaik была непригодна для использования.
Перегрузка функций в PHP не может быть выполнена из-за динамической типизации, т.е. в PHP вы не «определяете» переменные как определенные типы. Пример:
Каждая переменная относится к разному типу, но вы можете узнать тип до выполнения (см. 4-ую переменную). Для сравнения, на других языках используются:
В последнем примере вы должны принудительно установить тип переменной (в качестве примера я использовал тип данных «что-то»).
Еще одна «проблема», почему в PHP невозможна перегрузка функций: в PHP есть функция func_get_args (), которая возвращает массив текущих аргументов. Теперь рассмотрим следующий код:
Учитывая, что обе функции принимают любое количество аргументов, какой из них следует выбрать компилятору?
Наконец, я хотел бы указать, почему приведенные выше ответы частично неверны; Функция перегрузка / переопределение НЕ равна метода перегрузки / переопределения.
Если метод подобен функции, но специфичен для класса, в этом случае PHP разрешает переопределение в классах, но опять же без перегрузки из-за семантики языка.
В заключение, такие языки, как Javascript, допускают переопределение (но опять же, без перегрузки), однако они также могут показывать разницу между переопределением пользовательской функции и метода:
источник
Пример перегрузки
источник
Хотя парадигма перегрузки не полностью поддерживается PHP, тот же (или очень похожий) эффект может быть достигнут с помощью параметра (ов) по умолчанию (как уже упоминалось ранее).
Если вы определяете свою функцию так:
Когда вы вызываете эту функцию, например:
вы получите одну функциональность (# 1), но если вы вызовете ее с параметром вроде:
вы получите еще одну функциональность (№2). Это эффект перегрузки - разные функции в зависимости от входных параметров функции.
Знаю, сейчас кто-нибудь спросит, какие функциональные возможности получит, если назовет эту функцию как f (0).
источник
Я хотел бы указать здесь, что перегрузка в PHP имеет совершенно другое значение по сравнению с другими языками программирования. Многие люди сказали, что перегрузка не поддерживается в PHP, и, согласно общепринятому определению перегрузки, да, эта функциональность не доступна явно.
Однако правильное определение перегрузки в PHP совершенно иное.
В PHP перегрузка означает динамическое создание свойств и методов с использованием магических методов, таких как __set () и __get (). Эти методы перегрузки вызываются при взаимодействии с методами или свойствами, которые недоступны или не объявлены.
Вот ссылка на руководство по PHP: http://www.php.net/manual/en/language.oop5.overloading.php
источник
Перегрузка метода происходит, когда два или более метода с одинаковым именем метода, но разным количеством параметров в одном классе. PHP не поддерживает перегрузку методов. Переопределение метода означает, что два метода с одинаковым именем метода и одинаковым количеством параметров в двух разных классах означают родительский класс и дочерний класс.
источник
Между перегрузкой и переопределением функций есть некоторые различия, хотя обе функции содержат одно и то же имя. При перегрузке функции с одним и тем же именем содержат разные типы аргументов или возвращаемых типов; например: "function add (int a, int b)" & " function add (float a, float b); Здесь функция add () перегружена. В случае переопределения и аргумент, и имя функции совпадают. Обычно это встречается в наследовании или в чертах. Мы должны следовать некоторой тактике, чтобы ввести , какая функция будет выполняться сейчас.Поэтому при переопределении программист следует некоторой тактике для выполнения желаемой функции, при которой при перегрузке программа может автоматически идентифицировать желаемую функцию ... Спасибо!
источник
Перегрузки: в реальном мире перегрузка означает назначение кому-то дополнительных вещей. Как и в реальном мире, перегрузка в PHP означает вызов дополнительных функций. По-другому вы можете сказать, что у него более тонкая функция с другим параметром. В PHP вы можете использовать перегрузку с помощью волшебных функций, например __get, __set, __call и т. Д.
Пример перегрузки:
Переопределение: в объектно-ориентированном программировании переопределение заключается в замене родительского метода в дочернем классе. При переопределении вы можете повторно объявить метод родительского класса в дочернем классе. Итак, в основном цель переопределения - изменить поведение метода родительского класса.
Пример переопределения:
источник
PHP 5.xx не поддерживает перегрузку, поэтому PHP не является полностью ООП.
источник