-
__clone()方法的使用。在clone一个新对象时 希望和clone过来的数据不一样;可以用__clone()这个函数在下面$this->name = "tbd";在__clone()方法里可以自定义修改克隆的内容,去设置克隆后的对象的初始值。
查看全部 -
当希望生成一个新的真正独立存储的对象,但新对象的所有数据和源对象中的相同,这时我们使用关键字 clone来解决;
(前提是在类中定义了 __clone()方法);使用新对象调用属性时,将自动调用__clone()方法(此方法可以对新对象的数据进行修改即初始化)
这就是:想改变一个对象,但是又不想影响源对象,就使用clone;
查看全部 -
使用&指向同一个堆栈空间,实际上还是一个对象;直接赋值就变成了两个对象,一个属性值改变时另外属性值也会发生改变,如果用clone进行复制的话,两个对象之间操作不受任何干扰,相互完全独立。
查看全部 -
讲师语录:想对一个对象进行操作,但又不想影响源对象的数据,这时使用clone
查看全部 -
3.__isset()方法:当【不可访问属性或未定义的属性】调用isset()或empty()时,此方法被调用
·调用示例:public function __isset($name){}
4.__unset()方法:当【不可访问属性或未定义的属性】调用unset()时,此方法被调用
对不可访问属性调用isset()和empty()时,会触发__isset()魔术方法,注意isset和empty不是相反的关系,isset判断的是值是否被定义过,empty认为没定义过的返回true
查看全部 -
这几个魔术方法的核心意义?存在意义?
讲师语录:通过__get()、__set()、__isset()、__unset()等能够让我们操作在类中没有被定义的属性的名称;这是这几个魔术方法的最大效果(目的/用法);
我们把这种方式成为属性的重载查看全部 -
在给不可访问属性赋值时,__set()会被调用 定义function __set($name,$value)
读取不可访问属性的值时,__get()会被调用 定义function __get($name)
当对不可访问属性调用isset()或empty()时,__isset()会被调用
当对不可访问的属性调用unset()时,__unset()会被调用
所谓不可访问属性,实际上就是在调用某个属性时发现这个属性没有被定义(不可访问属性,也包括虽然定义了没有访问权限),这时候不同的操作会触发不同的魔术方法
这几个方法也被成为属性重载的魔术方法
属性重载只能在对象中进行。在静态方法中,这些魔术方法将不会被调用。所以这些方法都不能被 声明为 static。从 PHP 5.3.0 起, 将这些魔术方法定义为 static 会产生一个警告。
查看全部 -
在给不可访问属性赋值时,__set()会被调用 定义function __set($name,$value)
读取不可访问属性的值时,__get()会被调用 定义function __get($name)
所谓不可访问属性,实际上就是在调用某个属性时发现这个属性没有被定义(不可访问属性,也包括虽然定义了但没有访问权限),这时候不同的操作会触发不同的魔术方法
格式:
__get()方法:这个方法用来获取私有成员属性值的,有一个参数,参数传入你要获取的成员属性的名称,返回获取的属性值,这个方法不用我们手工的去调用,因为我们也可以把这个方法做成私有的方法,是在直接获取私有属性的时候对象自动调用的。
__set()方法:这个方法用来为私有成员属性设置值的,有两个参数,第一个参数为你要为设置值的属性名,第二个参数是要给属性设置的值,没有返回值。
案例:
//定义一个类
class Fruit{
//定义类的私有属性
private $color;
//__set()方法用来设置私有属性
public function __set($name,$value){
$this->$name = $value;
}
//__get()方法用来获取私有属性
public function __get($name){
return $this->$name;
}
}
//以上类Fruit中有两个私有的成员属性,设置了__set和__get以后,可以直接通过下面这种方式对成员变量进行调用。
$fruit = new Fruit();
//调用没有访问权限的属性并给其设置值
$fruit->color = 'red';
echo $fruit->color;
//调用没有被定义的属性并给其设置值
$fruit->weight = '80kg';
echo $fruit->weight;
如果没有__set和__get,直接通过$fruit->color这种方式调用,则会出错。
注意:将__get()和__set()方法设置为private私有的访问权限,并不影响其被自动调用;只要对象调用了未定义的或者没有访问权限的属性,就会触发这两个方法
这几个方法也被成为属性重载的魔术方法
属性重载只能在对象中进行。在静态方法中,这些魔术方法将不会被调用。所以这些方法都不能被 声明为 static。从 PHP 5.3.0 起, 将这些魔术方法定义为 static 会产生一个警告。
详情:https://blog.csdn.net/wanghongios/article/details/49357891
查看全部 -
通过这两个方法,设置的属性,相当于是个动态属性;即这个属性在类里面压根就不存在;
因为这两个魔术方法是在对象调用某个属性时发现这个属性没有被定义(不可访问属性,也包括虽然定义了但没有访问权限),这时候这两个方法就会被触发查看全部 -
这些方法不是默认存在的,而是我们手工添加到类里面去的,像构造方法(__construct())一样, 类里面添加了才会存在
查看全部 -
正常情况下在PHP中,是不允许存在多个同名方法的;
但是,通过__call()和__callStatic(),就能达到类似的效果
查看全部 -
1.魔术方法 __call():当对象访问不存在的方法名称时,此方法会被自动调用。
①调用示例:public function __call($name,$argument){}
②注意:访问控制关键字必须为public;必须有两个参数:对象访问的方法名称($name)、方法包含的参数($argument,数组);
2.魔术方法 __callStatic():当对象访问不存在的静态方法名称时,此方法会被自动调用。
①调用示例:public static function __callStatic($name,$argument){} 此方法为静态方法(static)
②注意:访问控制关键字必须为public;必须有两个参数:对象访问的方法名称($name)、方法包含的参数($argument,数组);
3.这两种方法也被称为方法的重载。通过这两个方法,对同一个方法($name)的调用可以对应不同的方法的实现(即同一个方法的静态调用、动态调用对应不同的方法实现)
重写/覆盖 override
指:子类重写了父类的同名方法
重载: overload
重载是指:存在多个同名方法,但参数类型/个数不同.
传不同的参数,调用不同的方法
但是在PHP中,不允许存在多个同名方法.
因此,不能够完成java,c++中的这种重载
但是,PHP的灵活,能达到类似的效果,例如通过__call()和__callStatic()就可以实现;
查看全部 -
1.魔术方法 __call():当对象访问不存在的方法名称时,此方法会被自动调用。
①调用示例:public function __call($name,$argument){}
②注意:访问控制关键字必须为public;必须有两个参数:对象访问的方法名称($name)、方法包含的参数($argument,数组);
2.魔术方法 __callStatic():当对象访问不存在的静态方法名称时,此方法会被自动调用。
①调用示例:public static function __callStatic($name,$argument){} 此方法为静态方法(static)
②注意:访问控制关键字必须为public;必须有两个参数:对象访问的方法名称($name)、方法包含的参数($argument,数组);
3.这两种方法也被称为方法的重载。通过这两个方法,对同一个方法($name)的调用可以对应不同的方法的实现(即同一个方法的静态调用、动态调用对应不同的方法实现)
重写/覆盖 override
指:子类重写了父类的同名方法
重载: overload
重载是指:存在多个同名方法,但参数类型/个数不同.
传不同的参数,调用不同的方法
但是在PHP中,不允许存在多个同名方法.
因此,不能够完成java,c++中的这种重载
但是,PHP的灵活,能达到类似的效果,例如通过__call()和__callStatic()就可以实现
查看全部 -
1.魔术方法: __tostring会在把对象转换为string的时候自动调用
2.魔术方法: __invoke会在把对象当作方法的时候自动调用
(前提是这些魔术方法都要定义在类里面)
查看全部 -
面向对象--魔术方法
(使用这些魔术方法的前提是:要把这些魔术方法定义在类里面,用哪个定义哪个)查看全部
举报