php构造函数魔术方法,php魔术方法-程序员宅基地

技术标签: php构造函数魔术方法  

PHP把以__(两个下划线)开头的类方法当做魔术方法。所以,当定义类方法的时候,除了魔术方法,其他方法不建议以__为前缀。

1.__construct

__construct为php类的构造函数,当创建对象时,要先自动调用此方法,非常适合做一些初始化操作。

2.__destruct

__destruct为析构函数,当对象内部的操作执行完毕后,会自动调用此函数,释放内存。此外还有个规则就是后进先出,即后创建的对象先被释放。

3.__toString

此函数的原型public string __toString(void),当对象像字符串一样被处理时,将自动调用此函数,如echo $obj,$obj为对象。

4.__call

函数原型public mixed __call(string $name, array $arguments),当对象调用不存在的函数时,将调用此函数,不存在的函数名将作为第一个参数传给__call,传给不存在函数的参数将以数组的形式作为第二个参数传给__call.

5.__callStatic

函数原型public static mixed __callStatic(string $name, array $arguments),此函数和__call类似,只是在调用不存在的静态方法时,会自动调用此函数。

6.__clone

函数原型void __clone(void),当对象复制通过clone关键字来完成时,类中的__clone方法将自动被调用,在此方法中可以对新生成的对象的属性等进行重新设置,以此方法完成的复制,在内存中会有两个对象,彼此不互相影响。

7.__autoload

这个方法主要是自动载入类文件,例如

function __autoload($class_test){

include($class_test.".php");//根据自己实际情况定

}

这个方法不是定义在类内部的。

8.__set和__get

函数原型public void __set(string $name, mixed $value),比如说,我们在类中定义了一个私有的属性,我们在类外部是不能访问他的值和设置他的值的,如果想用对象访问他,就可以利用__set方法和下面讨论的__get方法。当对象操作不可访问的属性时,将自动调用__set方法和__get方法。

__get原型public mixed __get(string $name)

下面是测试的例子

function __autoload($class_name){

include($class_name . ".php");

}

class  MyPc{

public $name = "thinkphp";

public $age;

protected $city = "changchun";

private $tmp;

function __construct(){//构造函数

$this->age = 24;

}

function __destruct(){//析构函数

}

function __toString(){

return "__toString is tested!!";

}

function __call($name, $arguments){//对象调用不存在的函数时调用

echo "the " . $name . implode(",", $arguments) . "\n";

}

static function __callStatic($name, $arguments){//调用不存在的静态方法时调用

echo "the " . $name . implode(",", $arguments) . "\n";

}

function __clone(){//克隆

$this->name = "ci";

}

function __set($var, $value){

$this->$var = $value;

}

function __get($arg){

echo $this->$arg;

}

}

$pc = new MyPc();

echo $pc->age . "\n";//__construct test

echo $pc . "\n" ;//__toString test

$pc->test("call test");//__call test

MyPc::good("lala");//__callStatic test

$pc1 = clone $pc;//__clone test

echo $pc1->name . "\n";

$pc->tmp = "private field";

echo $pc->tmp . "\n";

echo $pc->city;

//测试__autoload方法,要重新写个php类文件

$test = new Good();

echo $test->name;

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_39572168/article/details/116091494

智能推荐

使用iconv进行内码转换(Big5->GB2312) -程序员宅基地

文章浏览阅读479次。iconv是一个通过unicode作为中间码实现各种内码间相互转换的库,它基本上囊括了世界上所有编码方式,例如,ASCII、 GB2312、 GBK、 GB18030、BIG5、UTF-8、UCS-2、UCS-2BE、UCS-2LE、UCS-4、UCS-4BE、UCS- 4LE、UTF-16、 UTF-16BE、UTF-16..._iconv utf16 utf32

hadoop的四个核心配置文件详解_简述配置hadoop需要修改的xml文件是哪些?-程序员宅基地

文章浏览阅读9.9k次,点赞5次,收藏44次。https://blog.csdn.net/cuitaixiong/article/details/51591410hadoop常用端口配置1.HDFS 端口参数描述默认配置文件例子值fs.default.namenamenode RPC交互端口8020core-site.xmlhdfs://master:8020/dfs.http.address..._简述配置hadoop需要修改的xml文件是哪些?

详解活动图计算关键路径、最早开始时间、最晚开始时间、冗余时间,C++ 程序实现_活动图最早开始时间-程序员宅基地

文章浏览阅读2.6w次,点赞49次,收藏110次。题目下图是一个软件开发项目的活动图,对于图中每条边的数字表示完成这条边代表的活动的天数。例如,完成终止于里程碑E的活动需要 4 天时间。对于每个活动,列出它的前驱,并计算最早开始时间、最晚开始时间和时差,然后确定出关键路径。—— 《软件工程 第 4 版》中的原题写文缘由网上的文章大都是对于 “点” 求最早开始时间和最晚开始时间。在我看来,是不准确的。对于边的解法,有的写得又太复杂,还是自己写吧。误区在哪需要注意的是,图中的点,并不代表活动,并不能说活动 AAA 用 333 天到达活动 _活动图最早开始时间

Windows环境下通过Xshell发送文件到远程Linux主机_windows环境变量可以发给linux 通过xming-程序员宅基地

文章浏览阅读278次。windows与linux之间的中小型文件传递可以使用sz、rz命令来实现sz:将linux主机中选定的文件发送到windows主机。rz:执行该命令会弹出一个文件选择窗口,从windows主机选择文件发送到linux主机。首先检查linux主机上有没有安装lrzsz。如果已按照会显示按照的版本,如果没有安装不会有任何显示。(以下为已安装)[root]# yum list i..._windows环境变量可以发给linux 通过xming

CDH页面中Oozie的调度告警邮箱设置_cdh+oozie-程序员宅基地

文章浏览阅读725次。CDH页面中Oozie的调度告警邮箱设置1. 开启SLA2. smtp设置3. Hue中,对Workflow任务进行设置4. 设置收件邮箱,结束时间可根据任务时长修改,其他可以默认yyyy-MM-dd’T’HH:mm+0800标定时间2021-06-27T00:00+08005. 邮件通知内容..._cdh+oozie

Python 统计字典中key value 的最大值,最小值,以及统计key value的个数等_c# dictionary查找value最少的数量-程序员宅基地

文章浏览阅读1.6w次,点赞5次,收藏28次。1.字典:参考:https://www.runoob.com/python/python-dictionary.html键一般是唯一的,如果重复最后的一个键值对会替换前面的,值不需要唯一。dict = {'a': 1, 'b': 2, 'b': '3'}print(dict['b'])print(dict)后面的会替换前面的:如上结果:'b': 2,被 'b': '3'替换,..._c# dictionary查找value最少的数量

随便推点

ijkplayer源码分析 FrameQueue分析_rindex_shown-程序员宅基地

文章浏览阅读354次。ijkplayer源码分析 FrameQueue分析_rindex_shown

MATLAB实现Lagrange插值函数_matlab lagrange-程序员宅基地

文章浏览阅读1.8w次,点赞24次,收藏76次。MATLAB实现Lagrange插值函数首先我们绘制Lagrange基函数首先给出一个Lagrange基函数比较复杂的设法:function y=lagrange(x0,y0,x)n=length(x0);m=length(x);for i=1:m z=x(i); s=0.0; for k=1:n p=1.0; for j=1:n if j~=k p = p*(z-x0(j))/(x0_matlab lagrange

Jenkins拉取Gitlab项目代码配置SSH Keys步骤_jenkins git ssh key-程序员宅基地

文章浏览阅读7.3k次,点赞3次,收藏10次。Jenkins容器生成秘钥进入目录:cd ~/.ssh如果没有该目录就创建:mkdir -p ~/.ssh生成秘钥:ssh-keygen -t rsa -C “登录gitlab的邮箱”查看对应的ssh-keyjenkins@f050d7fa04f0:~/.ssh$ lsid_rsa id_rsa.pubid_rsa.pub:公钥,复制到gitlab平台配置ssh-keyid_rsa:私钥,复制到jenkins平台配置jenkins凭据拷贝id_rsa.pub到gitlab配置ssh-_jenkins git ssh key

使用git命令时,系统报错:bash: git: command not found...-程序员宅基地

文章浏览阅读6.9k次。使用git命令时,系统报错:bash: git: command not found…原因:服务器没有安装git导致系统报错解决方法:(Centos7)yum install -y git 执行命令安装git后即可解决_bash: git: command not found...

如何查看SAP表变更记录_sap ps 项目更改记录查询-程序员宅基地

文章浏览阅读2.2k次。在运维的过程中,我们有时需要去追踪一些表的变更记录,如采购订单的单价更新,采购订单的入库标识何时更新等,以便我们可以更快的追踪定位到问题所在,本章给大家介绍下如何追踪系统中表的变更记录。根据表名获取更改文档对象,表:TCDOB。_sap ps 项目更改记录查询

超链接打不开是什么原因html,超链接打不开是什么原因-程序员宅基地

文章浏览阅读2.4w次。演示工具:电脑型号:华硕adolbook14 2020系统版本:windows10具体原因及解决方法:1、如果是链接到本地文件的超链接无法打开,可能是相对路径和绝对路径的问题,绝对地址,是有完全的路径,如果超链接的路径写错了,就无法打开。2、检查一下被链接的文件是否被改变了存储位置,如果是,需重新设置一次。3、如果链接的是局域网上其它电脑中的文档,可能是被链接的电脑网络设置出了问题,先检查能否链接...

推荐文章

热门文章

相关标签