在PHP5魔术函数1,__construct() 当实例化一个对象的时候,这个对象的这个方法首先被调用。
<ol class="dp-xml"> <li class="alt"><span><span>class Test </span></span></li> <li class=""><span>{ </span></li> <li class="alt"><span> function __construct() </span></li> <li class=""><span> { </span></li> <li class="alt"><span> echo "before"; </span></li> <li class=""><span> } </span></li> <li class="alt"> <span>} </span><span></span><span></span> </li> <li class=""> <span>$</span><span class="attribute"><font color="#ff0000">t</font></span><span> = </span><span class="attribute-value"><font color="#0000ff">new</font></span><span> Test(); </span> </li> </ol>
输出是:
start
我们知道php5对象模型 和类名相同的函数是类的构造函数,那么如果我们同时定义构造函数和__construct()方法的话,php5会默认调用构造函数而不会调用__construct()函数,所以__construct()作为类的默认的构造函数
PHP5魔术函数2,__destruct() 当删除一个对象或对象操作终止的时候,调用该方法。
<ol class="dp-xml"> <li class="alt"><span><span>class Test </span></span></li> <li class=""><span>{ </span></li> <li class="alt"><span> function __destruct() </span></li> <li class=""><span> { </span></li> <li class="alt"><span> echo "end"; </span></li> <li class=""><span> } </span></li> <li class="alt"><span>} </span></li> <li class=""> <span>$</span><span class="attribute"><font color="#ff0000">t</font></span><span> = </span><span class="attribute-value"><font color="#0000ff">new</font></span><span> Test(); </span> </li> </ol>
将会输出
end
我们就可以在对象操作结束的时候进行释放资源之类的操作
PHP5魔术函数3,__get() 当试图读取一个并不存在的属性的时候被调用。
如果试图读取一个对象并不存在的属性的时候,PHP就会给出错误信息。如果在类里添加__get方法,并且我们可以用这个函数实现类似java中反射的各种操作
<ol class="dp-xml"> <li class="alt"><span><span>class Test </span></span></li> <li class=""><span>{ </span></li> <li class="alt"><span> public function __get($key) </span></li> <li class=""><span> { </span></li> <li class="alt"><span> echo $key . " 不存在"; </span></li> <li class=""><span> } </span></li> <li class="alt"><span>} </span></li> <li class=""><span> </span></li> <li class="alt"><span> </span></li> <li class=""> <span>$</span><span class="attribute"><font color="#ff0000">t</font></span><span> = </span><span class="attribute-value"><font color="#0000ff">new</font></span><span> Test(); </span> </li> <li class="alt"> <span>echo $t-</span><span class="tag"><strong><font color="#006699">></font></strong></span><span>name; </span> </li> <li class=""><span> </span></li> <li class="alt"><span>就会输出: </span></li> <li class=""><span>name 不存在 </span></li> </ol>
PHP5魔术函数4,__set() 当试图向一个并不存在的属性写入值的时候被调用。
<ol class="dp-xml"> <li class="alt"><span><span>class Test </span></span></li> <li class=""><span>{ </span></li> <li class="alt"><span> public function __set($key,$value) </span></li> <li class=""><span> { </span></li> <li class="alt"><span> echo '对'.$key . "附值".$value; </span></li> <li class=""><span> } </span></li> <li class="alt"><span>} </span></li> <li class=""><span> </span></li> <li class="alt"><span> </span></li> <li class=""> <span>$</span><span class="attribute"><font color="#ff0000">t</font></span><span> = </span><span class="attribute-value"><font color="#0000ff">new</font></span><span> Test(); </span> </li> <li class="alt"> <span>$t-</span><span class="tag"><strong><font color="#006699">></font></strong></span><span class="attribute"><font color="#ff0000">name</font></span><span> = </span><span class="attribute-value"><font color="#0000ff">"aninggo"</font></span><span>; </span> </li> <li class=""><span> </span></li> <li class="alt"><span>就会输出: </span></li> <li class=""><span>对 name 附值 aninggo </span></li> </ol>
PHP5魔术函数5,__call() 当试图调用一个对象并不存在的方法时,调用该方法。
<ol class="dp-xml"> <li class="alt"><span><span>class Test </span></span></li> <li class=""><span>{ </span></li> <li class="alt"><span> public function __call($Key, $Args) </span></li> <li class=""><span> { </span></li> <li class="alt"><span> echo "您要调用的 {$Key} 方法不存在。你传入的参数是:" . print_r($Args, true); </span></li> <li class=""><span> } </span></li> <li class="alt"><span>} </span></li> <li class=""><span> </span></li> <li class="alt"> <span>$</span><span class="attribute"><font color="#ff0000">t</font></span><span> = </span><span class="attribute-value"><font color="#0000ff">new</font></span><span> Test(); </span> </li> <li class=""> <span>$t-</span><span class="tag"><strong><font color="#006699">></font></strong></span><span>getName(aning,go); </span> </li> </ol>
程序将会输出:
您要调用的 getName 方法不存在。参数是:Array
(
[0] => aning
[1] => go
)
PHP5魔术函数6,__toString() 当打印一个对象的时候被调用
这个方法类似于java的toString方法,当我们直接打印对象的时候回调用这个函数
<ol class="dp-xml"> <li class="alt"><span><span>class Test </span></span></li> <li class=""><span>{ </span></li> <li class="alt"><span> public function __toString() </span></li> <li class=""><span> { </span></li> <li class="alt"><span> return "打印 Test"; </span></li> <li class=""><span> } </span></li> <li class="alt"><span>} </span></li> <li class=""><span> </span></li> <li class="alt"><span> </span></li> <li class=""> <span>$</span><span class="attribute"><font color="#ff0000">t</font></span><span> = </span><span class="attribute-value"><font color="#0000ff">new</font></span><span> Test(); </span> </li> <li class="alt"><span> </span></li> <li class=""><span>echo $t; </span></li> </ol>
运行echo $t;的时候,就会调用$t->__toString();从而输出
打印 Test
PHP5魔术函数7,__clone() 当对象被克隆时,被调用
<ol class="dp-xml"> <li class="alt"><span><span>class Test </span></span></li> <li class=""><span>{ </span></li> <li class="alt"><span> </span></li> <li class=""><span> public function __clone() </span></li> <li class="alt"><span> { </span></li> <li class=""><span> echo "我被复制了!"; </span></li> <li class="alt"><span> } </span></li> <li class=""><span>} </span></li> <li class="alt"><span> </span></li> <li class=""> <span>$</span><span class="attribute"><font color="#ff0000">t</font></span><span> = </span><span class="attribute-value"><font color="#0000ff">new</font></span><span> Test(); </span> </li> <li class="alt"> <span>$</span><span class="attribute"><font color="#ff0000">t1</font></span><span> = </span><span class="attribute-value"><font color="#0000ff">clone</font></span><span> $t; </span> </li> <li class=""><span> </span></li> <li class="alt"><span>程序输出: </span></li> <li class=""><span>我被克隆了! </span></li> </ol>
PHP5魔术函数8.顺便介绍下php5中提供的几个非常COOl的实验性函数
(1)runkit_method_rename
这个函数可以动态的改变我们所调用的函数的名字。
<ol class="dp-xml"> <li class="alt"><span><span>class Test </span></span></li> <li class=""><span>{ </span></li> <li class="alt"><span> </span></li> <li class=""><span> function foo() { </span></li> <li class="alt"><span> return "foo! "; </span></li> <li class=""><span> } </span></li> <li class="alt"><span> </span></li> <li class=""><span>} </span></li> <li class="alt"><span> </span></li> <li class=""><span>runkit_method_rename( </span></li> <li class="alt"><span> 'Test', //类名 </span></li> <li class=""><span> 'foo',//实际调用的函数 </span></li> <li class="alt"><span> 'bar'//显示调用的函数 </span></li> <li class=""><span>); </span></li> <li class="alt"><span> </span></li> <li class=""><span>echo Test::bar(); </span></li> <li class="alt"><span> </span></li> <li class=""><span>程序将输出 </span></li> <li class="alt"><span> </span></li> <li class=""><span>foo! </span></li> </ol>
(2) runkit_method_add
这个PHP5魔术函数可以动态的向类中添加函数
<ol class="dp-xml"> <li class="alt"><span><span>class Test </span></span></li> <li class=""><span>{ </span></li> <li class="alt"><span> </span></li> <li class=""><span> function foo() { </span></li> <li class="alt"><span> return "foo! "; </span></li> <li class=""><span> } </span></li> <li class="alt"><span> </span></li> <li class=""><span>} </span></li> <li class="alt"><span> </span></li> <li class=""><span>runkit_method_add( </span></li> <li class="alt"><span> Test, //类名 </span></li> <li class=""><span> 'add', //新函数名 </span></li> <li class="alt"><span> '$num1, $num2',//传入参数 </span></li> <li class=""><span> 'return $num1 + $num2;',//执行的代码 </span></li> <li class="alt"><span> RUNKIT_ACC_PUBLIC </span></li> <li class=""><span>); </span></li> <li class="alt"><span> </span></li> <li class=""><span>// 调用 </span></li> <li class="alt"> <span>echo $e-</span><span class="tag"><strong><font color="#006699">></font></strong></span><span>add(12, 4); </span> </li> </ol>
(3)runkit_method_copy
可以把A类中的函数拷贝到类B中并对PHP5魔术函数重命名
<ol class="dp-xml"> <li class="alt"><span><span>class Foo { </span></span></li> <li class=""><span> function example() { </span></li> <li class="alt"><span> return "foo! "; </span></li> <li class=""><span> } </span></li> <li class="alt"><span>} </span></li> <li class=""><span> </span></li> <li class="alt"><span>class Bar { </span></li> <li class=""><span> //空类 </span></li> <li class="alt"><span>} </span></li> <li class=""><span> </span></li> <li class="alt"><span>//执行拷贝 </span></li> <li class=""><span>runkit_method_copy('Bar', 'baz', 'Foo', 'example'); </span></li> <li class="alt"><span> </span></li> <li class=""><span>//执行拷贝后的函数 </span></li> <li class="alt"><span>echo Bar::baz(); </span></li> </ol>
(4) runkit_method_redefine
动态的修改函数的返回值
这个PHP5魔术函数可以让我们轻松的实现对类的MOCK测试!是不是很COOL呢
- class Example {
- function foo() {
- return "foo! ";
- }
- }
- //创建一个测试对象
- $e = new Example();
- // 在测试对象之前输出
- echo "Before: " . $e->foo();
- // 修改返回值
- runkit_method_redefine(
- 'Example',
- 'foo',
- '',
- 'return "bar! ";',
- RUNKIT_ACC_PUBLIC
- );
- // 执行输出
- echo "After: " . $e->foo();
(5)runkit_method_remove
这个PHP5魔术函数就很简单了,看名字就能看出来了,动态的从类中移除函数
<ol class="dp-xml"> <li class="alt"><span><span>class Test { </span></span></li> <li class=""><span> function foo() { </span></li> <li class="alt"><span> return "foo! "; </span></li> <li class=""><span> } </span></li> <li class="alt"><span> </span></li> <li class=""><span> function bar() { </span></li> <li class="alt"><span> return "bar! "; </span></li> <li class=""><span> } </span></li> <li class="alt"><span>} </span></li> <li class=""><span> </span></li> <li class="alt"><span>// 移除foo函数 </span></li> <li class=""><span>runkit_method_remove( </span></li> <li class="alt"><span> 'Test', </span></li> <li class=""><span> 'foo' </span></li> <li class="alt"><span>); </span></li> <li class=""><span> </span></li> <li class="alt"><span>echo implode(' ', get_class_methods('Test')); </span></li> <li class=""><span> </span></li> <li class="alt"><span>程序输出 </span></li> <li class=""><span>bar </span></li> </ol>
以上所介绍的代码就是关于PHP5魔术函数的具体应用方式。

php5和php8的区别在性能、语言结构、类型系统、错误处理、异步编程、标准库函数和安全性等方面。详细介绍:1、性能提升,PHP8相对于PHP5来说在性能方面有了巨大的提升,PHP8引入了JIT编译器,可以对一些高频执行的代码进行编译和优化,从而提高运行速度;2、语言结构改进,PHP8引入了一些新的语言结构和功能,PHP8支持命名参数,允许开发者通过参数名而不是参数顺序等等。

Python 中有许多方法可以帮助我们理解代码的内部工作原理,良好的编程习惯,可以使我们的工作事半功倍!例如,我们最终可能会得到看起来很像下图中的代码。虽然不是最糟糕的,但是,我们需要扩展一些事情,例如:load_las_file 函数中的 f 和 d 代表什么?为什么我们要在 clay 函数中检查结果?这些函数需要什么类型?Floats? DataFrames?在本文中,我们将着重讨论如何通过文档、提示输入和正确的变量名称来提高应用程序/脚本的可读性的五个基本技巧。1. Comments我们可

一眨眼的功夫,机器人都已经学会变魔术了?只见它先是拿起桌上的水勺,向观众证明了里面什么也没有……然后,它又把手中鸡蛋似的物体放了进去,然后把水勺放回桌子上,开始“施法”……就在它把水勺再次拿起的时候,奇迹发生了。原先放进去的鸡蛋不翼而飞,跳出的东西变成了一个篮球……再来看一遍连贯动作:△此动图为二倍速一套动作下来如行云流水,只有把视频用0.5倍速反复观看,才终于发现了其中的端倪:如果手速再快一些,大概真的就可以瞒天过海了。有网友感叹,机器人变魔术的水平比自己还要高:为我们表演这段魔术的,是Mag

连续分级概率评分(Continuous Ranked Probability Score, CRPS)或“连续概率排位分数”是一个函数或统计量,可以将分布预测与真实值进行比较。机器学习工作流程的一个重要部分是模型评估。这个过程本身可以被认为是常识:将数据分成训练集和测试集,在训练集上训练模型,并使用评分函数评估其在测试集上的性能。评分函数(或度量)是将真实值及其预测映射到一个单一且可比较的值 [1]。例如,对于连续预测可以使用 RMSE、MAE、MAPE 或 R 平方等评分函数。如果预测不是逐点

js是弱类型语言,不能像C#那样使用param关键字来声明形参是一个可变参数。那么js中,如何实现这种可变参数呢?下面本篇文章就来聊聊JavaScript函数可变参数的实现方法,希望对大家有所帮助!

一、前言前几天在Python钻石交流群有个叫【emerson】的粉丝问了一个Python排序的问题,这里拿出来给大家分享下,一起学习下。其实这里【瑜亮老师】、【布达佩斯的永恒】等人讲了很多,只不过对于基础不太好的小伙伴们来说,还是有点难的。不过在实际应用中内置函数sorted()用的还是蛮多的,这里也单独拿出来讲一下,希望下次再有小伙伴遇到的时候,可以不慌。二、基础用法内置函数sorted()可以用来做排序,基础的用法很简单,看个例子,如下所示。lst=[3,28,18,29,2,5,88

Python 中的 main 函数充当程序的执行点,在 Python 编程中定义 main 函数是启动程序执行的必要条件,不过它仅在程序直接运行时才执行,而在作为模块导入时不会执行。要了解有关 Python main 函数的更多信息,我们将从如下几点逐步学习:什么是 Python 函数Python 中 main 函数的功能是什么一个基本的 Python main() 是怎样的Python 执行模式Let’s get started什么是 Python 函数相信很多小伙伴对函数都不陌生了,函数是可

php5改80端口的方法:1、编辑Apache服务器的配置文件中的端口号;2、辑PHP的配置文件以确保PHP在新端口上工作;3、重启Apache服务器,PHP应用程序将开始在新的端口上运行。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器

Dreamweaver Mac版
视觉化网页开发工具

SublimeText3 英文版
推荐:为Win版本,支持代码提示!

记事本++7.3.1
好用且免费的代码编辑器