多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
## 1、什么是重载 * 在其它编程语言中,面向对象的重载是指,方法有相同的名称,但是参数列表不相同的情形,但PHP不支持同名函数或同名方法。 * PHP所提供的"重载"(overloading)是指动态地"创建"类属性和方法,我们是通过魔术方法来实现的。 * 当调用当前环境下未定义或不可见的类属性或方法时,重载方法会被调用。 * 所有的重载方法都必须被声明为 public。 * 属性重载只能在对象中进行。在静态方式中,这些魔术方法将不会被调用。所以这些方法都不能被 声明为 static。 * 这些魔术方法的参数都不能通过引用传递。 ![](https://img.kancloud.cn/83/38/8338f5326aa0dafa8749e24c6615d268_879x236.png) ![](https://img.kancloud.cn/10/9f/109f444b61770c35933883f8a979b432_829x222.png) ![](https://img.kancloud.cn/2a/75/2a75ccbcfd71eb415a8f497caa7150f4_1106x608.png) ## 2、属性重载 (1)__get()魔术方法 * 描述:读取不可访问属性的值时,__get() 会被调用。 * 语法: ``` public mixed __get ( string $name ) ``` ![](https://img.kancloud.cn/1e/db/1edbf65b95e7c472637fc93fa61dd6e4_730x359.png) (3)__isset()魔术方法 * 描述:当对不可访问属性调用 isset() 或 empty() 时,__isset()会被调用。 * 语法: ``` public bool __isset ( string $name ) ``` ![](https://img.kancloud.cn/75/e1/75e1be4fcf91dd793e08cb36bc3b98fc_785x489.png) (4)__unset()魔术方法 * 描述:当对不可访问属性调用 unset() 时,__unset()会被调用。 * 语法: ``` public void __unset ( string $name ) ``` ![](https://img.kancloud.cn/bd/17/bd17b7f7b2a9ca144527e7f9312b7ea0_714x401.png) ## 3、方法重载 (1)__call()魔术方法 * 描述:在对象中调用一个不可访问方法时,__call() 会被调用。 * 语法: ``` public mixed __call ( string $name , array $arguments ) ``` ![](https://img.kancloud.cn/7e/3b/7e3bce870d3561b22351c55fb52ef873_822x391.png) (2)__callStatic()魔术方法 * 描述:用静态方式中调用一个不可访问方法时,__callStatic() 会被调用。 * 语法: ``` public static mixed __callStatic ( string $name , array $arguments ) ``` ![](https://img.kancloud.cn/8f/04/8f0460083df1b731a5518c37aed0ae02_924x395.png)