PHP8中的魔术方法-PHP8知识详解

    时间: 浏览:799次  来源:站长在线
导读:在PHP 8中,魔术方法是一种特殊的方法,它们以两个下划线(__)开头。魔术方法允许您定义类的行为,例如创建对象、调用其他方法或访问和修改类的属性。

PHP 8中,魔术方法是一种特殊的方法,它们以两个下划线(__)开头。魔术方法允许您定义类的行为,例如创建对象、调用其他方法或访问和修改类的属性。以下是一些常见的魔术方法:

__construct(): 类的构造函数。当一个对象被创建时自动调用。

__destruct(): 类的析构函数。当一个对象被销毁时自动调用。

__get($name): 在读取一个不可访问属性的值时自动调用。

__set($name, $value): 在给一个不可访问属性赋值时自动调用。

__isset($name): 在对不可访问属性调用 isset() 或 empty() 函数时自动调用。

__unset($name): 在对不可访问属性调用 unset() 函数时自动调用。

__call($name, $arguments): 在调用一个不存在或不可访问的方法时自动调用。

__callstatic($name, $arguments): 在调用一个不存在或不可访问的静态方法时自动调用。

__toString(): 在将对象作为字符串输出时自动调用。

__invoke($arguments): 当尝试将对象作为函数调用时自动调用。

__clone(): 当对象被克隆时自动调用。

__debugInfo(): 在使用 var_dump() 函数输出对象信息时自动调用。

__serialize(): 在对象被序列化时自动调用。

__unserialize($data): 在对象被反序列化时自动调用。

__sleep(): 在对象被序列化时自动调用,返回要序列化的属性列表

__wakeup(): 在对象被反序列化时自动调用。


因为php8有众多的魔术方法,本文也不会一一详细说明了,本文以__set()和__get()方法来详细讲解。

由于面向对象思想并不鼓励直接从类的外部访问类的属性,以强调封装性,所以可以使用__get 和__set 方法来达到此目的。无论何时,类属性被访问和操作时,访问方法都会被激发。通过使用它们,可以避免直接对类属性进行访问。

(1)当程序试图写入一个没有定义或不可见的成员变量时,PHP就会执行__set()方法。该方法包含两个参数,分别表示变量名称和变量值。

(2) 当程序调用一个没有定义或不可见的成员变量时,PHP就会执行__get()方法来读取变量值。该方法包含一个参数,表示要调用变量的名称。

使用__set()和__get()方法,参考代码

<?php
    class Fruit{
        function __set($names,$value){
            $this->$names = $value;
        }

        function __get($names){
            return $this->$names;
        }
    };
    $a = new Fruit ();
    $a->name = "梨子";
    $a->price = "3.88元";
    echo $a->name."的价格为:".$a->price."<br />";
    $b = new Fruit();
    $b->name = "火龙果";
    $b->num="666公斤";
    $b->price= "4.88元";
    echo $b->name."的库存为:".$b->num.",价格为: ".$b->price."<br />";
?>

以上代码在PHP8中的运行结果如下:

梨子的价格为:3.88元
火龙果的库存为:666公斤,价格为: 4.88元

上面代码中,变量name、price、num都是没有定义成员变量,所以此时会调用__set()和__get()方法。



本文地址:https://www.olzz.com/php8zhongdemoshufangfa.html
码字不易,打个赏呗
杨泽业感谢你的支持!

猜你喜欢

PHP8中的魔术方法-PHP8知识详解

导读:在PHP 8中,魔术方法是一种特殊的方法,它们以两个下划线(__)开头。魔术方法允许您定义类的行为,例如创建对象、调用其他方法或访问和修改类的属性。

2023-10-06  分类:PHP学堂  浏览:800次


PHP8的类与对象的基本操作之成员变量-PHP8知识详解

导读:成员变量是指在类中定义的变量。在类中可以声明多个变量,所以对象中可以存在多个成员变量,每个变量将存储不同的对象属性信息。

2023-09-21  分类:PHP学堂  浏览:839次


PHP8中字符串与数组的转换-PHP8知识详解

导读:在PHP8中使用explode()函数和implode()函数实现字符串和数组之间的转换。1、使用explode()函数把字符串按照一定的规则拆分为数组中的元素,并且形成数组。

2023-09-16  分类:PHP学堂  浏览:791次


PHP8的字符串操作3-PHP8知识详解

今天继续分享字符串的操作,前面说到了字符串的去除空格和特殊字符,获取字符串的长度,截取字符串、检索字符串。 今天继续分享字符串的其他操作。如:替换字符串、分割和合成字符串、统计字符串中单词的个数。

2023-08-17  分类:PHP学堂  浏览:1054次


PHP8的字符串操作2-PHP8知识详解

导读:PHP对字符串的截取可以使用内置函数substr()和mb_substr()实现。检索字符串就是在一个字符串中查找另一个字符串,就像我们在文本编辑器里面查找关键字一样。可以使用strstr()函数、stristr()函数、strpos()函数。

2023-08-15  分类:PHP学堂  浏览:797次


PHP8的字符串操作1-PHP8知识详解

字符串是php中最重要的数据之一,字符串的操作在PHP编程占有重要的地位。在使用PHP语言开发web项目的过程中,为了实现某些功能,经常需要对某些字符串进行特殊的处理,比如字符

2023-08-13  分类:PHP学堂  浏览:1044次


PHP8定义字符串的方法-PHP8知识详解

导读:本文的主要内容有:使用单引号或双引号定义字符串、使用定界符定义字符串和字符串的连接符。

2023-08-11  分类:PHP学堂  浏览:809次


站长在线Python精讲:在Python中使用正则表达式的split()方法分割字符串详解

导读:欢迎你来到站长在线的站长学堂学习Python知识,本文学习的是《在Python中使用正则表达式的split()方法分割字符串详解》。

2021-12-11  分类:Python学堂  浏览:1739次


站长在线Python精讲:在Python中使用正则表达式的sub()方法替换字符串详解

欢迎你来到站长在线的站长学堂学习Python知识,本文学习的是《在Python中使用正则表达式的sub()方法替换字符串详解》。 在Python中使用正则表达式的sub()方法替换字符串。其语法格式如下: re.sub(pattern, repl, string, count=0, flags=0)

2021-12-10  分类:Python学堂  浏览:1721次


站长在线Python精讲:在Python中匹配字符串的3个方法详解

导读:欢迎你来到站长在线的站长学堂学习Python知识,本文学习的是《在Python中匹配字符串的3个方法详解》。本知识点主要内容有:使用match()方法进行匹配、使用search()方法进行匹配、使用findall()方法进行匹配。

2021-12-09  分类:Python学堂  浏览:1490次