网站地图    收藏   

主页 > php专栏 > php面向对象 >

几个PHP面向对象小实例 - php面向对象

来源:自学PHP网    时间:2014-11-30 12:29 作者: 阅读:

[导读] 抽象类:抽象类不能被实例化,抽象类与其它类一样,允许定义变量及方法,抽象类同样可以定义一个抽象的方法,抽象类的方法不会被执行,不过将有可能会在其派生类中执行。...

几个PHP面向对象小实例

抽象类:抽象类不能被实例化,抽象类与其它类一样,允许定义变量及方法,抽象类同样可以定义一个抽象的方法,抽象类的方法不会被执行,不过将有可能会在其派生类中执行。

例1:抽象类

  1. <?php 
  2. abstract class foo { 
  3. protected $x
  4. abstract function display(); 
  5. function setX($x) { 
  6. $this->x = $x
  7. }  
  8. class foo2 extends foo { 
  9. function display() { 
  10. // Code 
  11. ?> 

__call:PHP5 的对象新增了一个专用方法 __call(),这个方法用来监视一个对象中的其它方法。如果你试着调用一个对象中不存在的方法,__call 方法将会被自动调用。

例2:__call

  1. <?php 
  2. class foo { 
  3. function __call($name,$arguments) { 
  4. print("Did you call me? I'm $name!"); 
  5. $x = new foo(); 
  6. $x->doStuff(); 
  7. $x->fancy_stuff(); 
  8. ?> 

这个特殊的方法可以被用来实现“过载(overloading)”的动作,这样你就可以检查你的参数并且通过调用一个私有的方法来传递参数。

例3:使用 __call 实现“过载”动作

  1. <?php 
  2. class Magic { 
  3. function __call($name,$arguments) { 
  4. if($name=='foo') { 
  5. if(is_int($arguments[0])) $this->foo_for_int($arguments[0]); 
  6. if(is_string($arguments[0])) $this->foo_for_string($arguments[0]); 
  7. private function foo_for_int($x) { 
  8. print("oh an int!"); 
  9. private function foo_for_string($x) { 
  10. print("oh a string!"); 
  11. $x = new Magic(); 
  12. $x->foo(3); 
  13. $x->foo("3"); 
  14. ?> 

__set 和 __get

这是一个很棒的方法,__set 和 __get 方法可以用来捕获一个对象中不存在的变量和方法。

例4: __set 和 __get

  1. <?php 
  2. class foo { 
  3. function __set($name,$val) { 
  4. print("Hello, you tried to put $val in $name"); 
  5. function __get($name) { 
  6. print("Hey you asked for $name"); 
  7. $x = new foo(); 
  8. $x->bar = 3; 
  9. print($x->winky_winky); 
  10. ?> 

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论