首页 > 编程知识 正文

php魔术方法与魔术常量,php魔法函数

时间:2023-05-06 11:22:04 阅读:234177 作者:2498

1、__construct构造方法

__construct这个魔术方法又称构造方法。具有构造方法的类会在每次创建对象时先调用此方法,所以非常适合在使用对象之前做一些初始化的工作。因此,这个方法往往用于类进行初始化执行一些初始化操作,如给属性赋值、连接数据库等

PS: 如果子类中定义了构造函数则不会隐式调用其父类的构造函数。要执行父类的构造函数,需要在子类的构造函数中调用 parent::__construct()。如果子类没有定义构造函数则会如同一个普通的类方法一样从父类继承(假如没有被定义为 private 的话)。

Class BaseClass{//构造方法public function __construct(){print('in TestClass __construct'.PHP_EOL);}}class SonClass extends BaseClass{public function __construct(){parent::__construct();print("in SonClass __construct".PHP_EOL);}}class OtherClass extends BaseClass { // 继承 BaseClass 的构造函数}$baseClass = new BaseClass();//结果为:in TestClass __construct$sonClass = new SonClass();//结果为:in TestClass __construct//结果为:in SonClass __construct$otherClass = new OtherClass();//结果为:in TestClass __construct 2、__destruct析构方法

有构造方法就有对应的析构方法,即__destruct方法,析构方法会在某个对象的所有应用都被删除,或者当对象被显式销毁时执行。

Class BaseClass{//构造方法public function __construct(){print('in TestClass __construct'.PHP_EOL);}public function __destruct(){ echo "当对象销毁时会调用!!!"; }}$baseClass = new BaseClass();$a = "__destruct";unset($b);//结果为:当对象销毁时会调用!!! 3、__set 当给不可访问或不存在属性赋值时被调用 Class BaseClass{ public function __set($name, $value){ echo $name.'-'.$value; echo "this is __set"; }}$baseClass = new BaseClass();$baseClass->not_exist_property = "base";//结果为:not_exist_property-base this is __set 4、__get读取不可访问或不存在属性时被调用 Class BaseClass{ public function __get($name){ echo $name; echo "this is __get"; }}$baseClass->not_exist_property //结果为:not_exist_property this is __get 5、__call调用不可访问或不存在的方法时被调用。ps:这里要有两个参数 string $name 是要调用的方法名。array $arguments 参数是一个枚举数组,包含着要传递给$name的参数。Class BaseClass{ public function __call(string $name , array $arguments){ echo $name; print_r($arguments); echo "this is __call"; }}$baseClass = new BaseClass();$baseClass->index('base'); //结果为:index//Array([0] => base)//this is __call 6、__callStatic调用不可访问或不存在的静态方法时被调用 Class BaseClass{ public static function __callStatic($name, $arguments){ echo $name; print_r($arguments); echo "this is __callStatic"; }}$baseClass = new BaseClass();$baseClass::index('base');//结果为:index//Array([0] => base)//this is __callStatic 7、__toString当一个类被转换成字符串时被调用

__toString为在直接输出对象引用的时候,就不会产生错误,而是自动调用了__tostring()方法,输出__tostring()方法中返回的字符串,如果没有这个方法,那么echo一个对象将报错,例如Recoverable fatal error: Object of class BaseClass could not be converted to string 语法错误,实际上这是一个类型匹配失败错误。不过仍然可以用print_r()和var_dump()函数输出一个对象。

 


 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。