рдХреНрдпрд╛ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЗрдВрдЯрд░рдлрд╝реЗрд╕% рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо% рдХреНрдпрд╛ рд╣реИ?
рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреЛрдб рдЖрдкрдХреЛ рдХреЛрдИ рдкреНрд░рд╢реНрди рдирд╣реАрдВ рджреЗрдЧрд╛ред PHP рд╕реВрдХреНрд╖реНрдорддрд╛ (рд╡рд┐рд╖рдорддрд╛рдПрдВ?) рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
interface someInterface{ public function someMethod(); } interface anotherInterface{ public function someMethod(); } class Foo implements someInterface,anotherInterface { public function someMethod(){ echo 'someMethod() was called'.PHP_EOL; } } $foo = new Foo(); $foo->someMethod();
рддреЛ рдЗрд╕рдХреЗ рдХрд╛рдо рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреНрдпрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧреАред
рдЬрд╡рд╛рдм рдмрд┐рд▓реНрд▓реА рдХреЗ рдиреАрдЪреЗ рд╣реИред

рд╕рд╣реА рдЙрддреНрддрд░ рд╣реИ: "рдШрд╛рддрдХ рддреНрд░реБрдЯрд┐: рд╕рд╛рд░ рдХрд╛рд░реНрдп рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ ..." рд▓реЗрдХрд┐рди рдХреНрдпреЛрдВ? - рдЖрдк рд╕рд╣реА рдкреВрдЫреЗрдВред рдЬрдм рдореИрдВрдиреЗ рдкрд╣рд▓реА рдмрд╛рд░ рдпрд╣ рд╕рд╛рдордирд╛ рдХрд┐рдпрд╛ рдерд╛ рддреЛ рдореИрдВрдиреЗ рд╡рд╣реА рд╕рд╡рд╛рд▓ рдкреВрдЫрд╛ рдерд╛ред рдЬреИрд╕рд╛ рдХрд┐ рдЦреЛрдЬ рд╕реЗ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ, рдпрд╣ PHP рдХреА рдПрдХ рд╡рд┐рдЪрд┐рддреНрд░рддрд╛, рдЧрд░рд┐рдорд╛, рдиреБрдХрд╕рд╛рди, рдореВрд░реНрдЦрддрд╛, рд▓рд╛рдн (рд░реЗрдЦрд╛рдВрдХрд┐рдд) рд╣реИред рдпрджрд┐ рд╣рдо
php.net/manual/en/language.oop5.interfaces.php рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ рдЬреЛ рдЗрд╕ рддрд░рд╣ рдХреА рдбрд░рд╛рд╡рдиреА рдмрд╛рддреЗрдВ рд▓рд┐рдЦрддрд╛ рд╣реИ "рдиреЛрдЯ: рдПрдХ рд╡рд░реНрдЧ рджреЛ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдлрд╝рдВрдХреНрд╢рди рдирд╛рдореЛрдВ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдХрд╛ рдХрд╛рд░рдг рд╣реЛрдЧрд╛ред" рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдПрдХ PHP рд╡рд░реНрдЧ рд╕рдорд╛рди рддрд░реАрдХреЛрдВ рд╕реЗ рдпреБрдХреНрдд рдХрдИ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдкреИрджрд╛ рдХрд░рддрд╛ рд╣реИред рд░реБрдХрд┐рдП, рд░реБрдХрд┐рдП, рд░реБрдХрд┐рдП ... рдЖрдЗрдП рдЗрд╕рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддреЗ рд╣реИрдВред рдЖрдЗрдП C ++ рдореЗрдВ рдХрдИ рд╡рд┐рд░рд╛рд╕рдд рдХреЛ рдпрд╛рдж рдХрд░рддреЗ рд╣реИрдВред
class someClass { public: void someMethod(){ }; } class anotherClass { public: void someMethod(){ }; } class fooClass: someClass,anotherClass{ } int main () { fooClass foo; foo.someMethod(); return 0; }

рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ рдЕрдирд┐рд╢реНрдЪрд┐рддрддрд╛ рдореМрдЬреВрдж рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреМрди рд╕реА рд╡рд┐рдзрд┐рдпрд╛рдВ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА рд╣реЛрдВрдЧреА (рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ, рд▓рдЧрднрдЧ)ред рдПрдХрд╛рдзрд┐рдХ рд╡рд░реНрдЧ рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдЯрдХреНрдХрд░реЛрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрдЯрд░рдлреЗрд╕ рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЖрдЦрд┐рд░рдХрд╛рд░, рдореЛрдЯреЗ рддреМрд░ рдкрд░ рдмреЛрд▓рддреЗ рд╣реБрдП, рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕рд┐рд░реНрдл "рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ" рд╣реИ рдЬреЛ рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рд╡рд░реНрдЧ рдРрд╕реЗ рддрд░реАрдХреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдПрдХ рд╡рд┐рдзрд┐ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП, рд╡рд░реНрдЧ рдХреЛ рдпрд╣ рдзреНрдпрд╛рди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЙрд╕реЗ рдПрдХ рд╣реА рддрд░реАрдХреЗ рдХреЗ рд╕рд╛рде рдХрдИ рдЗрдВрдЯрд░рдлреЗрд╕ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реИред рдореИрдВ рджреЛрд╣рд░рд╛рддрд╛ рд╣реВрдВ, рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ "рдирд┐рд░реНрджреЗрд╢" рд╣реИ рдЬреЛ рд╡рд░реНрдЧ рдХреЛ рдмрддрд╛ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдЙрд╕реЗ рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдирд┐рд░реНрджреЗрд╢ рд╣реИрдВред PHP рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХрд╛ рддрд░реНрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ, рдлрд┐рд░ рд╕реЗ рд╣рдореЗрдВ рдРрд╕рд╛ рдХреНрдпреЛрдВ рдорд┐рд▓рд╛ рдЬреЛ рд╣рд░ рдЬрдЧрд╣ рдХреА рддрд░рд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ? рдХреЛрдИ рд╡рд░реНрдЧ рд╕рдорд╛рди рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░рдлреЗрд╕ рдХреНрдпреЛрдВ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ? рдпрд╣ рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдХреА рдУрд░ рдХреНрдпреЛрдВ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИ?
UPD1: рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ, рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рджреВрд╕рд░рд╛ рд╡реНрдпрдХреНрддрд┐
en.wikipedia.org/wiki/Method_overloading (рдПрдХ рд╣реА рд╡рд┐рдзрд┐ рдХрд╛ рдирд╛рдо, рд▓реЗрдХрд┐рди рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХреЙрд▓ рд╣рд╕реНрддрд╛рдХреНрд╖рд░: рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рдУрд╡рд░рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реИ: рд╡рд┐рдзрд┐, рдЙрдирдХреА рд╕рдВрдЦреНрдпрд╛, рдЖрджрд┐ рдХреЗ рд▓рд┐рдП рдкрд╛рд░рд┐рдд рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░)ред рд╢рд╛рдпрдж рдореИрдВрдиреЗ рдХреБрдЫ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдирд╣реАрдВ рдмрддрд╛рдпрд╛, рд▓реЗрдХрд┐рди рд▓реЗрдЦ рдореЗрдВ рдУрд╡рд░рд▓реЛрдбрд┐рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдирд╣реАрдВ рдХреА рдЧрдИ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ PHP рдЗрд╕ рддрдВрддреНрд░ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рдХрдИ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрдВрддреНрд░ рдХрд╛ рдХреЛрдИ рд╕рдВрдмрдВрдз рдирд╣реАрдВ рд╣реИред
рдПрдХ рдмрд╛рд░ рдлрд┐рд░, PHP рдореЗрдВ, рдПрдХ рд╡рд░реНрдЧ рдХрдИ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЬрд╛рд╡рд╛ / C # / рдореЗрдВ рдПрдХ рд╣реА рддрд░реАрдХреЗ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдпрд╣ рд╕рдВрднрд╡ рд╣реИ:
public interface someInterface { public void someMethod(); } public interface anotherInterface { public void someMethod(); } public class fooClass implements anotherInterface,someInterface { public static void main(String[] args) { fooClass fooClass = new fooClass(); fooClass.someMethod(); } @Override public void someMethod() { System.out.println("someMethod() was called"); } }
UPD: C #
habrahabr.ru/blogs/php/116916/#comment_3808966 рдореЗрдВ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдХрд╛
2 рд╕рдорд╛рдзрд╛рди
UPD: 3 рдиреЗ D
en.wikipedia.org/wiki/D_%28programming_language%29 рдореЗрдВ рд╕рдорд╛рди рдХреЛрдб рдХреА рдЬрд╛рдБрдЪ рдХреА,
рдпрд╣ рдмрд┐рд▓рдХреБрд▓ рдирдИ OOP рднрд╛рд╖рд╛ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ, рдПрдб рдлрд╛рдЗрд▓ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИ:
import std.stdio; import std.stream; interface D{ void foo(); } interface A{ void foo(); } class E : D, A{ void foo(){ writefln("foo() was called"); } } void main (string[] args){ E e = new E(); e.foo(); } alagar@home:~/d$ dmd -run ed foo() was called