Heim  >  Artikel  >  Backend-Entwicklung  >  php重载与重写的区别?重载与其他语言(如java)有何差异?

php重载与重写的区别?重载与其他语言(如java)有何差异?

WBOY
WBOYOriginal
2016-08-04 09:20:43820Durchsuche

问题:
  PHP手册中关于重载的内容如下:PHP所提供的"重载"(overloading)是指动态地"创建"类属性和方法。
我们是通过魔术方法(magic methods)来实现的。
  如__call($funcname, $arguments) 、 __callStatic($funcname, $arguments)

  而JAVA语言中的重载,是指在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义。

调用方法时通过传递给它们的不同参数个数和参数类型来决定具体使用哪个方法。

  提问:php和java关于重载的概念肯定是有区别的,但是不知道到底真正的区别在哪里?

回复内容:

问题:
  PHP手册中关于重载的内容如下:PHP所提供的"重载"(overloading)是指动态地"创建"类属性和方法。
我们是通过魔术方法(magic methods)来实现的。
  如__call($funcname, $arguments) 、 __callStatic($funcname, $arguments)

  而JAVA语言中的重载,是指在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义。

调用方法时通过传递给它们的不同参数个数和参数类型来决定具体使用哪个方法。

  提问:php和java关于重载的概念肯定是有区别的,但是不知道到底真正的区别在哪里?

Java是强类型的

<code>public class DataArtist {
    ...
    public void draw(String s) {
        ...
    }
    public void draw(int i) {
        ...
    }
    public void draw(double f) {
        ...
    }
    public void draw(int i, double f) {
        ...
    }
}</code>

php的所谓overloading, 只是对一些魔法方法的类似重写
评论里有句话不错

This article should call this technique "interpreter hooks".

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn