PHP建站技术分享-从入门到精通_各类知识收集PHP建站技术分享-从入门到精通_各类知识收集PHP建站技术分享-从入门到精通_各类知识收集

QQ:420220301 微信/手机:150-3210-7690
当前位置:首页 > 工作总结

PHP之十六个魔术方法详细介绍

管理员 2025-03-07
工作总结
49

1. __construct()

  • 作用:类的构造函数,在创建对象时自动调用。

  • 使用场景:用于初始化对象的属性或执行一些准备工作。

  • 示例

    php
    复制
    class MyClass {
        public function __construct() {
            echo "对象已创建!";
        }}$obj = new MyClass(); // 输出:对象已创建!

2. __destruct()

  • 作用:类的析构函数,在对象被销毁时自动调用。

  • 使用场景:用于释放资源或执行清理操作。

  • 示例

    php
    复制
    class MyClass {
        public function __destruct() {
            echo "对象已销毁!";
        }}$obj = new MyClass();unset($obj); // 输出:对象已销毁!

3. __get($name)

  • 作用:在访问不可访问或未定义的属性时自动调用。

  • 使用场景:用于动态获取属性值。

  • 示例

    php
    复制
    class MyClass {
        private $data = [];
    
        public function __get($name) {
            return $this->data[$name] ?? null;
        }}$obj = new MyClass();echo $obj->name; // 输出:null

4. __set($name, $value)

  • 作用:在给不可访问或未定义的属性赋值时自动调用。

  • 使用场景:用于动态设置属性值。

  • 示例

    php
    复制
    class MyClass {
        private $data = [];
    
        public function __set($name, $value) {
            $this->data[$name] = $value;
        }}$obj = new MyClass();$obj->name = "PHP";echo $obj->name; // 输出:PHP

5. __isset($name)

  • 作用:在对不可访问或未定义的属性调用 isset() 或 empty() 时自动调用。

  • 使用场景:用于动态检查属性是否存在。

  • 示例

    php
    复制
    class MyClass {
        private $data = [];
    
        public function __isset($name) {
            return isset($this->data[$name]);
        }}$obj = new MyClass();var_dump(isset($obj->name)); // 输出:bool(false)

6. __unset($name)

  • 作用:在对不可访问或未定义的属性调用 unset() 时自动调用。

  • 使用场景:用于动态删除属性。

  • 示例

    php
    复制
    class MyClass {
        private $data = [];
    
        public function __unset($name) {
            unset($this->data[$name]);
        }}$obj = new MyClass();$obj->name = "PHP";unset($obj->name);

7. __call($name, $arguments)

  • 作用:在调用不可访问或未定义的方法时自动调用。

  • 使用场景:用于动态处理未定义的方法调用。

  • 示例

    php
    复制
    class MyClass {
        public function __call($name, $arguments) {
            echo "调用了未定义的方法:$name";
        }}$obj = new MyClass();$obj->undefinedMethod(); // 输出:调用了未定义的方法:undefinedMethod

8. __callStatic($name, $arguments)

  • 作用:在静态调用不可访问或未定义的方法时自动调用。

  • 使用场景:用于动态处理未定义的静态方法调用。

  • 示例

    php
    复制
    class MyClass {
        public static function __callStatic($name, $arguments) {
            echo "调用了未定义的静态方法:$name";
        }}MyClass::undefinedStaticMethod(); // 输出:调用了未定义的静态方法:undefinedStaticMethod

9. __toString()

  • 作用:在将对象当作字符串使用时自动调用。

  • 使用场景:用于定义对象的字符串表示形式。

  • 示例

    php
    复制
    class MyClass {
        public function __toString() {
            return "这是一个 MyClass 对象";
        }}$obj = new MyClass();echo $obj; // 输出:这是一个 MyClass 对象

10. __invoke()

  • 作用:在将对象当作函数调用时自动调用。

  • 使用场景:用于使对象可以像函数一样被调用。

  • 示例

    php
    复制
    class MyClass {
        public function __invoke($param) {
            echo "对象被调用,参数:$param";
        }}$obj = new MyClass();$obj("PHP"); // 输出:对象被调用,参数:PHP

11. __sleep()

  • 作用:在对象被序列化时自动调用,返回需要序列化的属性数组。

  • 使用场景:用于控制序列化时保存哪些属性。

  • 示例

    php
    复制
    class MyClass {
        public $name = "PHP";
        private $secret = "123";
    
        public function __sleep() {
            return ['name']; // 只序列化 name 属性
        }}$obj = new MyClass();echo serialize($obj); // 输出:O:7:"MyClass":1:{s:4:"name";s:3:"PHP";}

12. __wakeup()

  • 作用:在对象被反序列化时自动调用。

  • 使用场景:用于重新初始化对象或恢复资源。

  • 示例

    php
    复制
    class MyClass {
        public $name;
    
        public function __wakeup() {
            $this->name = "PHP";
        }}$obj = unserialize('O:7:"MyClass":0:{}');echo $obj->name; // 输出:PHP

13. __clone()

  • 作用:在对象被克隆时自动调用。

  • 使用场景:用于控制克隆对象的行为。

  • 示例

    php
    复制
    class MyClass {
        public function __clone() {
            echo "对象已被克隆!";
        }}$obj = new MyClass();$clone = clone $obj; // 输出:对象已被克隆!

14. __debugInfo()

  • 作用:在使用 var_dump() 打印对象时自动调用,返回要显示的属性数组。

  • 使用场景:用于控制调试信息的输出。

  • 示例

    php
    复制
    class MyClass {
        private $secret = "123";
    
        public function __debugInfo() {
            return ['message' => '这是一个调试信息'];
        }}$obj = new MyClass();var_dump($obj); // 输出:object(MyClass)#1 (1) { ["message"]=> string(18) "这是一个调试信息" }

15. __set_state($properties)

  • 作用:在使用 var_export() 导出对象时自动调用,返回一个可用的对象表示。

  • 使用场景:用于自定义对象的导出格式。

  • 示例

    php
    复制
    class MyClass {
        public $name;
    
        public static function __set_state($properties) {
            $obj = new MyClass();
            $obj->name = $properties['name'];
            return $obj;
        }}$obj = new MyClass();$obj->name = "PHP";eval('$newObj = ' . var_export($obj, true) . ';');echo $newObj->name; // 输出:PHP

16. __serialize() 和 __unserialize()(PHP 7.4+)

  • 作用:用于替代 __sleep() 和 __wakeup(),提供更灵活的序列化控制。

  • 使用场景:用于自定义序列化和反序列化逻辑。

  • 示例

    php
    复制
    class MyClass {
        private $data = [];
    
        public function __serialize() {
            return ['data' => $this->data];
        }
    
        public function __unserialize($data) {
            $this->data = $data['data'];
        }}

PHP 十六个 魔术 方法 详细 介绍

希望以上内容对你有所帮助!如果还有其他问题,请随时提问。 各类知识收集 拥有多年CMS企业建站经验,对 iCMS, LeCMS, ClassCMS, Fastadmin, PbootCMS, PHPCMS, 易优CMS, YzmCMS, 讯睿CMS, 极致CMS, Wordpress, HkCMS, YznCMS, WellCMS, ThinkCMF, 等各类cms的相互转化,程序开发,网站制作,bug修复,程序杀毒,插件定制都可以提供最佳解决方案。

相关推荐

扫码关注

qrcode

QQ交谈

回顶部