php 所有魔术方法,PHP常用的魔术方法及规则

news/2024/7/4 12:04:58

转:https://www.cnblogs.com/wanglijun/p/10926303.html

1. __construct 具有构造函数的类会在每次创建新对象时先调用此方法;初始化工作执行。

2. __desstruct 对象的所有引用都被删除或者当对象被显式销毁时执行。

3.__call()在对象中调用一个不可访问方法时,__call() 会被调用。

4.__callStatic()在静态上下文中调用一个不可访问方法时,__callStatic() 会被调用。

5.__set() 在给不可访问的属性赋值时调用

6.__get() 读取不可访问的属性值是自动调用

7.__isset() 当对不可访问的私有属性使用isset或empty时自动调用

8.__unset() 当对不可访问的私有属性使用unset时;自动调用

9.__toString()当一个类的实例对象;被当成一个字符串输出时调用

class a

{

private $name = 'james';

//设置私有属性

public function __set($a, $val)

{

echo "属性:'$a' 值: '$val' 在直接设置私有属性值的时候,自动调用了这个__set()方法为私有属性赋值
";

$this->$a = $val;

}

//获取私有属性

public function __get($a)

{

echo "属性:'$a' 在直接获取私有属性值的时候,自动调用了这个__get()方法\n";

return $this->$a;

}

/** 当对不可访问属性调用 isset() 或 empty() 时,__isset() 会被调用。*/

public function __isset($name)

{

echo "是否设置 '$name' 值?\n";

return isset($this->$name);

}

/** 当对不可访问属性调用 unset()会被调用。*/

public function __unset($name)

{

echo "销毁私有变量 '$name' 时调动";

unset($this->$name);

}

//方法用于一个类被当成字符串时应怎样回应

public function __toString()

{

return $this->name;

}

}

$test = new a();

echo $test . '
'; // 输出:james __toString()方法用于一个类被当成字符串时应怎样回应

//设置私有属性值的时候,调用_set()方法

$test->name = "中国人";//输出:属性:'name' 值: '中国人' 在直接设置私有属性值的时候,自动调用了这个__set()方法为私有属性赋值

//获取私有属性值的时候,调用_get()方法

echo $test->name.'
'; //输出:属性:'name' 在直接获取私有属性值的时候,自动调用了这个__get()方法 中国人

var_dump(isset($test->name)); //返回 true

var_dump(empty($test->name)); //返回 false

unset($test->name); //销毁时;自动调用__unset

var_dump($test->name); //报错;未定义 Undefined property: a::$name

4ee998a194e51076be4db8e956e5201f.png

标签:__,调用,name,私有,魔术,规则,test,PHP,属性

来源: https://www.cnblogs.com/whatstone/p/12059493.html


http://lihuaxi.xjx100.cn/news/236345.html

相关文章

Room Database完全使用手册

前言 Android数据持久层直接使用SQLite很麻烦,Google官方推出了Room, Google对Room的定义: The Room persistence library provides an abstraction layer over SQLite to allow fluent database access while harnessing the full power of …

软件工程技术基础-(软件复用技术)

软件可重用问题,包括源程序代码重用、静态库重用和组建重用。 源程序代码重用是直接将其他项目或系统开发完成的代码复制过来,直接使用。 限制源程序代码重用技术使用的关键因素是要考虑代码的语言实现,以及源代码 公开可能带来的知识产权问题…

php监听订单状态,ecshop数据库订单状态判断

order_info 表刚下完订单order_status 0shipping_status 0pay_status 0取消order_status 2shipping_status 0pay_status 0确认order_status 1shipping_status 0pay_status 0已付款order_status 1shipping_status 0pay_status 2配货中order_status 1shipping_status 3pay_status…

firefox下的调试工具

2019独角兽企业重金招聘Python工程师标准>>> vue-devtools https://addons.mozilla.org/en-US/firefox/user/13100848/ 转载于:https://my.oschina.net/u/3371661/blog/3003299

小编带你进入强如 Disruptor 也发生内存溢出?

前言OutOfMemoryError 问题相信很多朋友都遇到过,相对于常见的业务异常(数组越界、空指针等)来说这类问题是很难定位和解决的。 本文以最近碰到的一次线上内存溢出的定位、解决问题的方式展开;希望能对碰到类似问题的同学带来思路…

PHP上传文件函数move_upload,如何使用php中move_uploaded_file函数

我们平时上传的文件保存在临时文件夹中,例如/ tmp,但临时文件夹的内容在一段时间后会被删除,因此为了将来要使用上传文件,需要将内容保存在不太可能被任意删除的专用目录中,这时就需要使用move_uploaded_file函数&…

Dubbo2.6.5+Nacos注册中心(代替Zookeeper)

在上一节的小栗子的基础上&#xff0c;只需要更改两个地方 第一个&#xff1a;父工程的pom依赖增加 <!-- Dubbo Nacos registry dependency --><dependency><groupId>com.alibaba</groupId><artifactId>dubbo-registry-nacos</artifactId>…

oracle停止一切进程,oracle启动/停止的几种方法以及 启动和停止过程中出错的解决办法...

一、启动几种方法&#xff1a;1、sqlplus /nologconnect /as sysdbastartup2、sqlplus /nologconnect /as sysdbastartup nomountalter database mountalter database open在以上两种方法中&#xff0c;1方法中的startup相当于2方法中的startup nomountalter database mountalt…