魔术方法

魔术方法:系统在特定时机自动调用的方法

常用魔术方法:

1. __get 

        触发时机:对象在外部访问私有成员或者受保护属性时调用

        参数:参数就是属性名

2.__set

        触发时机:对象在外部设置私有成员或者受保护属性值时调用

        参数:属性名和属性值

3.__unset

        触发时机:对象在外部销毁私有成员或者受保护属性时调用

        参数:属性名

4.__isset    

        触发时机:对象在外部判断私有成员或者受保护属性时调用

        参数:属性名

5.__construct

        触发时机:在创建对象时调用

6.__destruct

        触发时机:在销毁对象时调用

7.__toString

        触发时机:echo 一个对象时触发

8.__debugInfo

        触发时机:var_dump一个对象时触发,需返回一个数组

9.__call

        触发时机:调用一个不存在的对象方法时触发

        参数:函数名和参数数组

10.__callStatic

        触发时机:调用一个不存在的静态方法时触发

        参数:函数名和参数数组

11.__sleep

        触发时机:在序列化一个对象时使用

        返回值:数组,数组写想要序列的成员和属性

12.__wakeup

        触发时机:在反序列化一个对象时使用

        反序列化成功以后,想执行一些初始化方法,可以写到这个函数中

13.__clone

        触发时机:在克隆一个对象时使用

        在这里面可以对克隆出来的对象的属性做一些操作

14.__autoload(唯一写在类外的魔术方法)

        触发时机:new一个对象时,当前脚本没有这个类,就会触发这个方法

        参数:该类名的字符串

<?php
	class Person{
		public $name = '小梅';
		protected $sex = '女';
		private $age = 18;
		
		public function __get($pro){
			/*if($pro=='sex'){
				return $this->sex;
			}else if($pro=='age'){
				return $this->age;
			}*/
			return $this->$pro;
		}
		
		public function __set($pro,$val){
			/*if($pro=='sex'){
				$this->sex = $val;
			}else if($pro=='age'){
				$this->age = $val;
			}*/
			$this->$pro = $val;
		}
		
		public function __unset($pro){
			unset($this->$pro);
		}
		
		public function __isset($pro){
			return isset($this->$pro);
		}
		
		public function __toString(){
			return '个人信息,name:'.$this->name;
		}
		
		public function __debugInfo(){
			return ['age','name'];
		}
		
		public function __call($name,$params){
			var_dump($name,$params);
		}
		
		public function __sleep(){
			return ['name','age'];
		}
		
		public function __wakeup(){
			$this->name = 'pan';
		}
		
		public function __clone(){
			echo '<br/>克隆对象中<br/>';
		}
	}
	
	function __autoload($className){
		echo $className.'该类不存在-----';
	}

	$mei = new Person();
	echo $mei->name;
	$mei->age = 20;
	echo $mei->age;
	echo '<br/>';
	echo $mei;
	$mei->demo(2,3,'ui');
	$str = serialize($mei);
	echo $str;
	$obj = unserialize($str);
	echo $obj;
	$mei2 = clone $mei;
	
	$dog = new Dog();
?>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python的魔术方法是以双下划线开头和结尾的方法,也被称为Magic Method(魔术方法)。这些方法在Python中具有特殊的功能和行为。魔术方法包括类的初始化方法__init__、比较方法、数值处理方法、普通算术操作符等等。魔术方法的作用是为了增强类的功能和灵活性,使对象能够具有更复杂的行为和操作。比如__init__方法用于初始化一个对象的状态,__str__方法定义了对象在被str()函数调用的行为,__repr__方法定义了对象在被repr()函数调用的行为等等。通过合理使用魔术方法,我们可以更好地控制和定制自己的类和对象的行为。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [python的魔术方法大全](https://blog.csdn.net/qq_40236497/article/details/125539436)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* [Python魔术方法详解](https://download.csdn.net/download/weixin_38501610/12879041)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值