iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >详解php中__set和__get方法及其应用场景
  • 926
分享到

详解php中__set和__get方法及其应用场景

2023-05-14 20:05:35 926人浏览 独家记忆
摘要

在PHP中,有两个非常有用的魔术方法(__set和__get),它们用来控制成员属性的读和写操作。本文将深入探讨这两个魔术方法的使用及其在php中的应用场景。__set方法当我们给一个不存在或不可访问的属性赋值时,PHP会自动调用__set

PHP中,有两个非常有用的魔术方法(__set和__get),它们用来控制成员属性的读和写操作。本文将深入探讨这两个魔术方法的使用及其在php中的应用场景。

__set方法

当我们给一个不存在或不可访问的属性赋值时,PHP会自动调用__set方法。例如:

class Person {
    private $name;

    public function __set($key, $value) {
        if ($key == 'name') {
            $this->name = $value;
        }
    }
}

$person = new Person();
$person->name = 'Lucas';

在上面的例子中,我们创建了一个类Person,并在类中定义了一个私有属性$name。我们也定义了一个__set方法,它会根据传入的$key来判断要设置哪个属性的值。如果$key等于'name',则将传入的值赋给$name属性。

我们创建了一个$person对象并给它设置了name属性的值。由于该属性是私有的,因此我们无法直接访问它。但是,我们通过$person->name的方式给它赋值,实际上会自动调用__set方法。

__get方法

相比__set方法,__get方法更加常用。当我们尝试读取一个不存在或不可访问的属性的值时,PHP会自动调用__get方法。例如:

class Person {
    private $name;

    public function __get($key) {
        if ($key == 'name') {
            return $this->name;
        }
    }
}

$person = new Person();
echo $person->name;

在上面的例子中,我们定义了一个__get方法,它会根据传入的$key来判断要获取哪个属性的值。如果$key等于'name',则返回$name属性的值。

我们创建了一个$person对象并尝试读取它的name属性的值。由于该属性是私有的,因此我们无法直接访问它。但是,我们通过$person->name的方式获取它的值,实际上会自动调用__get方法。

应用场景

__set和__get方法可以被用来控制成员属性的读和写操作。这在代码中非常有用,特别是在需要对私有属性进行访问控制和数据验证的代码中。

以下是一个名为User的简单类,它使用__set和__get方法来控制用户的姓名和年龄属性的读写操作:

class User {
    private $name;
    private $age;

    public function __set($key, $value) {
        switch ($key) {
            case 'name':
                $this->setName($value);
                break;
            case 'age':
                $this->setAge($value);
                break;
        }
    }

    public function __get($key) {
        switch ($key) {
            case 'name':
                return $this->name;
                break;
            case 'age':
                return $this->age;
                break;
        }
    }

    private function setName($name) {
        if (!is_string($name)) {
            throw new InvalidArgumentException('name must be a string');
        }

        $this->name = $name;
    }

    private function setAge($age) {
        if (!is_int($age)) {
            throw new InvalidArgumentException('age must be an integer');
        }

        $this->age = $age;
    }
}

$user = new User();
$user->name = 'Lucas';
$user->age = 26;

echo $user->name;
echo $user->age;

在上面的例子中,我们创建了一个User类,并在它们实现了__set和__get方法。我们还定义了一个私有方法setName和setAge来检查用户输入的姓名和年龄属性的合法性。

当我们给name和age属性赋值时,会自动调用__set方法。在__set方法中,我们根据$key的值将赋值操作委托给setName或setAge方法来处理。

当我们尝试读取name和age属性时,会自动调用__get方法。在__get方法中,我们根据$key的值获取相应的属性值。

总结

__set和__get方法是PHP语言中的两个非常有用的魔术方法。它们可以被用来控制成员属性的读和写操作,特别是在需要对私有属性进行访问控制和数据验证的代码中。我们通过一些示例代码掌握了这两个方法的基本用法和应用场景,希望能对读者有所帮助。

以上就是详解php中__set和__get方法及其应用场景的详细内容,更多请关注编程网其它相关文章!

--结束END--

本文标题: 详解php中__set和__get方法及其应用场景

本文链接: https://www.lsjlt.com/news/204793.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作