当前位置:首页 » 编程语言 » php函数重载

php函数重载

发布时间: 2023-07-09 23:02:25

php中 重载函数 __get() __set() _call作用及参数是什么

void __set ( string $name , mixed $value )
__set在对类内不可访问的成员赋值时被调用,$name是成员名,$value是赋的值
mixed __get ( string $name )
__get在对内类内不可访问的成员取值时被调用,$name是成员名
mixed __call ( string $name , array $arguments )
__call在对类内不可访问的方法调用时被调用,$name是方法名,$arguments是调用这个方法提供的参数

Ⅱ php中如何实现函数重载呢

PHP本身不能函数重载的,不过你可以使用类中的__call的魔术方法来实现。该魔术方法接受两个参数,一个数方法的名称,一个是包含该方法参数的数组。当对一个类调用一个不可见的方法时(比如该方法是private或者根本没有这个方法)被触发调用。

Ⅲ php和c,c++的区别是什么

的区别:
一个有protected成员变量(假设为i)的类型Base,他的子类Derived直接继承自Base,同时Derived有一个成员函数func,他的参数是Base类型的,这个函数可以访问Base对象的protecte的成员吗?在C++中不可以,而在PHP中可以。


关于重载:
PHP中不支持C++中的重载,重新定义个函数(不管是参数相同还是不同,都会导致重复定义错误)。PHP有自己的重载方法,而且比C++中的更广泛,他不仅可以重载函数(通过使运散用__call()方法),还可以重载成员变量(通过使用__get()和__set())。而C++中只能对函数进行重载,而且重载的方法只有:不同的参数类型,不同的函数修饰符(const)。


关于abstract和interface
PHP中配悄余有这两个修饰符,因为PHP不支持对一个普通类的多继承,因此interface用于实现多继承。Abstract类在C++中也存在,只是实现方培滚式不一样,C++中使用pure virtual函数来表明这个类是抽象类,不能单独被实例化。而PHP中不仅可以使用函数的修饰符abstract(另外class前也必须标明abstract)来标明这个意思,也可以只使用abstract修饰符修饰class更直接的表明他是抽象类。另外, C++中的pure virtual函数不受访问类型的限制,不管是什么访问类型,都会被看作是public;而php中的abstract函数不能被声明成private,仅此而已。


多态
因为PHP是弱类型语言,所以他的多态性到处都有体现,导致他的多态性不像C++中那么明显。比如,在PHP中基类的函数可以看作全是virtual的,因此它不需要加任何修饰符,子类中和基类同名的函数都会被动态调用,而C++不一样,如果基类中的这个函数没有加virtual修饰符,子类中的那个同名函数就不会被动态调用,只能静态调用了。

操作符重载
PHP中不存在,而C++存在。重点在==操作符,在PHP中他可以运用在任何类型上,即使这个类型没有(像C++中一样)写自己的==重载函数。PHP中对于对象的比较,==表示两个对象的属性和值都一样,而且类型也一样;PHP也存在一个===操作符,表示他们引用了同一个对象,这跟java中很像吧。


final关键字
PHP中存在这个关键字,表示这个函数不能被重写(如果他用来修饰函数),或者类不能被继承(如果用类修饰class)。而C++中没有这个关键字,也无法模拟出那个效果。


对象赋值和拷贝
C++中的拷贝或者赋值大致有这三种方式。

一种是指针的赋值,即p1 = &obj,相当于PHP和java中的赋值操作;

另一种是memberwise assignment,也就是在obj1 = obj2时发生的事情,默认情况下执行浅度拷贝,和PHP中clone的效果一样。他可以通过重载赋值拷贝操作来执行你的深度拷贝或者其他自定义的拷贝,这就相当于PHP中的__clone()成员函数;

第三种是memberwise initialization,也就是在参数传递时,传递返回值时或者包含对象的容器初始化的时候自动运行的,你可以通过自己定义拷贝构造函数来控制它的效果。

拷贝构造函数在PHP中几乎用不到,因为他的传递是完全按引用传递,而不是对象的直接拷贝。

Ⅳ php接口有什么用 只能定义函数 又不能在里面写代码

可以重载函数。多个方法拥有相同的名字,但在名字相同的同时,必须有不同的参数,这就是重载。
例如:
public interface a{//定义接口
public void show();//定义show方法
public void show(int a);//多了一个参数,重载show方法
}

热点内容
安卓如何查找旧密码 发布:2025-02-09 01:17:21 浏览:418
hadoop云存储 发布:2025-02-09 01:02:49 浏览:453
儿童编程网站推荐 发布:2025-02-09 01:02:48 浏览:673
u盘文件夹无法显示 发布:2025-02-09 01:02:15 浏览:508
安卓机头灯哪个好 发布:2025-02-09 01:02:05 浏览:123
数据滤波算法 发布:2025-02-09 01:00:29 浏览:123
孔加工编程 发布:2025-02-09 01:00:29 浏览:152
八爪鱼执行脚本 发布:2025-02-09 00:54:50 浏览:817
希捷硬盘缓存是多大的 发布:2025-02-09 00:50:24 浏览:17
浙江电脑服务器租用虚拟主机 发布:2025-02-09 00:29:48 浏览:77