面向对象魔术方法

魔术方法是PHP面向对象编程中的特殊功能,如__get()用于外部获取私有属性值,__set()用于设置私有属性或创建新属性,而__isset()则允许外部检查私有属性是否已设置。这些方法使得在对象操作中实现属性的动态处理和访问控制成为可能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

魔术方法是PHP面向对象中特有的特性。它们在特定的情况下被触发,都是以双下划线开头,你可以把它们理解为钩子,利用魔术方法可以轻松实现PHP面向对象中重载(Overloading即动态创建类属性和方法)。魔术方法很多还是成对出现的,以下列出目前PHP中所有的魔术方法。

1. __get()

在 php 面向对象编程中,类的成员属性被设定为 private 后,如果我们试图在外面调用它则会出现“不能访问某个私有属性”的错误。那么为了解决这个问题,我们可以使用魔术方法 __get()。

魔术方法__get()的作用:在程序运行过程中,通过它可以在对象的外部获取私有成员属性的值。

<?php
class Person{
	/*封装私有成员属性*/
	private $name='张三';private $sex='男';private $age=12;
	/*__get()方法用来获取私有属性*/
	function __get($property_name){
		echo '在直接获取私有成员属性得时候,自动调用了这个__get()方法<br/>';
		if(isset($this->$property_name))
		{
			return ($this->$property_name);
		}else{
			return NULL;
		}
	}
}
$p1=new Person();
/*直接获取私有属性得值,会自动调用__get()的方法,返回成员属性的值*/
echo '姓名:'.$p1->name.'<br/>';
echo '性别:'.$p1->sex.'<br/>';
echo '年龄:'.$p1->age.'<br/>';

2. __set()

__set( $property, $value )` 方法用来设置私有属性, 给一个未定义的属性赋值时,此方法会被触发,传递的参数是被设置的属性名和值。

<?php

   //属性重载
   class Person{

      //魔术方法__set
      //两个参数:属性名,属性值
      public function __set($name,$value){
         //增加一个允许列表,也就是说,只能在这些属性值里面,规定了属性值的范围
         $allow = array('name','age','tail');

         //判断用户的操作是否合法
         if(in_array($name,$allow)){
            //增加属性
            $this->$name = $value;
         }
      }
   }

   //实例化
   $person = new Person();

   var_dump($person);

   //给对象增加属性
   $person->name = '爷爷';
   $person->age  = 80;

   //增加一个不允许的属性
   $person->drag = '大麻';

   var_dump($person);

3.__isset()

判断一个属性是否被设置。

在对象外部使用isset()方法有两种情况:

如果参数是公有属性,那么可以利用isset()方法判断属性是否被设置;

如果参数是私有属性,isset()方法将无法使用。

那么,是否有办法判断私有属性被设置呢?当然,只需要在类里定义__isset()方法,就可以在对象外部利用isset()方法判断某个私有属性是否被设置了。

当然还有以下方法我就不举例了,以上是常用的

4.__unset()

5.__call()

6.__autoload()

7.__construct()

8.__destruct()

9.__clone()

10.__toString()

11.__sleep()

12.__wakeup()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值