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

在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方法。

立即学习“PHP免费学习笔记(深入)”;

__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方法及其应用场景的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2507373.html

(0)
上一篇 2025年3月5日 12:20:15
下一篇 2025年3月3日 12:44:15

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 微信不支持php导出PDF怎么办

    随着互联网技术的不断发展,越来越多的企业开始依赖于web应用程序进行数据管理和文件处理。而对于开发人员来说,其中最重要的一项任务之一,就是实现pdf文件的导出功能。而在这个过程中,往往出现微信不支持php导出pdf的问题,给开发带来很大的麻…

    编程技术 2025年3月5日
    200
  • php为什么修改css没有反应

    在网站开发中,php和css是两个很重要的技术。php主要负责网页的业务逻辑和数据处理,而css则负责网页的样式呈现。在实际开发中,我们常常会遇到php修改了css样式却没有生效的情况。那么,为什么会出现这种情况呢? 1.缓存问题 浏览器为…

    编程技术 2025年3月5日
    200
  • 如何在Windows系统中安装PHP扩展名

    对于php的开发者来说,安装扩展是非常关键的一步,因为这样可以为php添加各种不同的应用,用于解决各种不同的问题。在本文中,我们将介绍如何在windows系统中安装php扩展名,以便为您的php应用程序增加更多的功能。 下载PECL 扩展 …

    编程技术 2025年3月5日
    200
  • php页面怎么改写伪静态

    伪静态是指在页面 url 上添加后缀,让它看上去像静态页面,从而提高搜索引擎收录率和网站的友好度,而 php 页面默认是动态页面,url 带有参数。因此,对于 php 程序员来说,将 php 页面改写为伪静态是必不可少的一项技能。在本文中,…

    编程技术 2025年3月5日
    200
  • php怎么去除文本中的重复值

    在使用php编写程序时,经常会遇到需要去除文本中的重复值的情况。去除文本中的重复值可以大大提高程序的效率和准确性,避免重复计算和错误统计。本文将介绍如何使用php去除文本中的重复值。 一、PHP中去除数组中的重复值 在PHP中,可以使用ar…

    编程技术 2025年3月5日
    200
  • php显示不出图片怎么办

    php 是一种常用的编程语言,用于动态生成网页内容。而在网页开发和设计中,图片也是至关重要的元素之一。然而,有时候你可能会遇到 php 显示不出图片的问题,而这个问题可能出在多个方面。接下来,我们将一一探讨这些问题,并提供一些解决方案,让 …

    编程技术 2025年3月5日
    200
  • php实现页面跳转代码怎么写

    对于php实现页面跳转,一般有三种方式: 1.使用header函数 header函数可以在php中实现页面跳转。具体代码如下: 登录后复制 其中,Location后面的网址是需要跳转到的页面的地址。使用该函数跳转时,必须在之前没有输出过任何…

    编程技术 2025年3月5日
    200
  • PHP数组怎么转JS对象数组对象

    随着前端技术的不断发展,前后端分离逐渐成为一种趋势。在前后端分离的架构设计中,前端需要通过 api 请求后端的数据,此时前端需要通过 javascript 来操作数据,因此两者之间需要进行数据格式的转换。在前后端分离的开发中,php 作为服…

    编程技术 2025年3月5日
    200
  • php5怎么安装

    php5是许多网站服务器运行的基础,如果您打算在自己的计算机上搭建网站,那么您需要知道如何安装该语言。下面将为您提供一个php5的安装教程。 步骤1:安装服务器软件 PHP5需要在一个服务器软件上运行。Apache是一个受欢迎的免费、开源的…

    编程技术 2025年3月5日
    200
  • 聊聊PHP程序删除目录文件路径的相关知识

    在进行网站开发时,我们常常需要对文件进行删除操作,特别是删除一些临时文件或者无用文件,以达到优化网站存储空间的目的。如果我们使用的开发语言是php,那么删除文件就会变得非常简单。在本文中,我们将会介绍php程序删除目录文件路径的相关知识。 …

    编程技术 2025年3月5日
    200

发表回复

登录后才能评论