时间:2021-07-01 10:21:17 帮助过:21人阅读
输出对象
- <br><?php <br>// Declare a simple class <br>class TestClass{ <br>public $foo; <br>public function __construct($foo) { <br>$this->foo = $foo; <br>} <br>//定义一个__toString方法,返加一个成员属性$foo <br>public function __toString() { <br>return $this->foo; <br>} <br>} <br>$class = new TestClass('Hello'); <br>//直接
- <br><? <br>class Person{ <br>//下面是人的成员属性 <br>var $name; //人的名子 <br>var $sex; //人的性别 <br>var $age; //人的年龄 <br>//定义一个构造方法参数为属性姓名$name、性别$sex和年龄$age进行赋值 <br>function __construct($name="", $sex="", $age=""){ <br>$this->name=$name; <br>$this->sex=$sex; <br>$this->age=$age; <br>} <br>//这个人可以说话的方法, 说出自己的属性 <br>function say() { <br>echo "我的名子叫:".$this->name." 性别:".$this->sex." 我的年龄是:".$this->age."<br>"; <br>} <br>} <br>$p1=new Person("张三", "男", 20); <br>//使用“clone”克隆新对象p2,和p1对象具有相同的属性和方法。 <br>$p2=clone $p1; <br>$p2->say(); <br>?> <br> <br>PHP5 定义了一个特殊的方法名“__clone()”方法,是在对象克隆时自动调用的方法, <br>用“__clone()”方法将建立一个与原对象拥有相同属性和方法的对象,如果想在克隆后改变 <br>原对象的内容,需要在__clone()中重写原本的属性和方法,“__clone()”方法可以没有参数, <br>它自动包含$this 和$that 两个指针,$this 指向复本,而$that 指向原本; <br>代码片段 <br><span><u></u></span> 代码如下:<pre class="brush:php;toolbar:false layui-box layui-code-view layui-code-notepad"><ol class="layui-code-ol"><li><br>class Person{ <br>//下面是人的成员属性 <br>var $name; //人的名子 <br>var $sex; //人的性别 <br>var $age; //人的年龄 <br>//定义一个构造方法参数为属性姓名$name、性别$sex和年龄$age进行赋值 <br>function __construct($name="", $sex="", $age=""){ <br>$this->name=$name; <br>$this->sex=$sex; <br>$this->age=$age; <br>} <br>//这个人可以说话的方法, 说出自己的属性 <br>function say() { <br>echo "我的名子叫:".$this->name." 性别:".$this->sex." 我的年龄是:".$this->age."<br>"; <br>} <br>//对象克隆时自动调用的方法, 如果想在克隆后改变原对象的内容,需要在__clone()中重写原本 <br>的属性和方法 <br>function __clone(){ <br>//$this指的复本p2, 而$that是指向原本p1,这样就在本方法里,改变了复本的属性。 <br>$this->name="我是假的$that->name"; <br>$this->age=30; <br>} <br>} <br>$p1=new Person("张三", "男", 20); <br>$p2=clone $p1; <br>$p1->say(); <br>$p2->say(); <br>?> <br> <br>上例</li></ol></pre>输出: <br>执行结果 <br>我的名子叫:张三性别:男我的年龄是:20 <br>我的名子叫:我是假的张三性别:男我的年龄是:30 <br>18.__call 处理调用错误 <br>在程序开发中,如果在使用对象调用对象内部方法时候,调用的这个方法不存在那么程 <br>序就会出错,然后程序退出不能继续执行。那么可不可以在程序调用对象内部不存在的方法 <br>时,提示我们调用的方法及使用的参数不存在,但程序还可以继续执行,这个时候我们就要 <br>使用在调用不存在的方法时自动调用的方法“__call()”。 <br>代码片段 <br><span><u></u></span> 代码如下:<pre class="brush:php;toolbar:false layui-box layui-code-view layui-code-notepad"><ol class="layui-code-ol"><li><br><?php <br>//这是一个测试的类,里面没有属性和方法 <br>class Test{ <br>} <br>//产生一个Test类的对象 <br>$test=new Test(); <br>//调用对象里不存在的方法 <br>$test->demo("one", "two", "three"); <br>//程序不会执行到这里 <br>echo "this is a test<br>"; <br>?> <br> <br>上例出现如下错误,程序通出不能继续执行; <br>Fatal error: Call to undefined method Test::demo() <br>下面我们加上“__call()”方法,这个方法有2 个参数,第一个参数为调用不存在的方法 <br>过程中,自动调用__call()方法时,把这个不存在的方法的方法名传给第一个参数,第二个参 <br>数则是把这个方法的多个参数以数组的形式传进来。 <br>代码片段 <br><span><u></u></span> 代码如下:<pre class="brush:php;toolbar:false layui-box layui-code-view layui-code-notepad"><ol class="layui-code-ol"><li><br><?php <br>//这是一个测试的类,里面没有属性和方法 <br>class Test{ <br>//调用不存的方法时自动调用的方法,第一个参数为方法名,第二个参数是数组参数 <br>function __call($function_name, $args){ <br>print "你所调用的函数:$function_name(参数:"; <br>print_r($args); <br>print ")不存在!<br>\n"; <br>} <br>} <br>//产生一个Test类的对象 <br>$test=new Test(); <br>//调用对象里不存在的方法 <br>$test->demo("one", "two", "three"); <br>//程序不会退出可以执行到这里 <br>echo "this is a test<br>"; <br>?> <br> <br>上例</li></ol></pre>输出</li></ol></pre>结果为: <br>执行结果 <br>你所调用的函数: demo(参数:Array ( [0] => one [1] => two [2] => three ) )不存在! <br>this is a test.