面向对象--魔术方法

    1. __set()和__get()方法
      用于对私有成员进行赋值或获取值的操作。
      __set()方法:在程序运行中为私有的成员属性设置值,它不需要任何返回值。__set()方法包含两个参数,分别表示变量的名称和值。两个参数不可省略。这个方法不需要主动调用,可以在方法前加上private关键字,防止用户直接调用。
      __get()方法:在程序运行过程中,在对象的外部获取私有成员属性的值。它有一个必要的参数,即私有成员属性名,它返回一个允许对象在外部使用的值。这个方法同样不需要主动调用,可以在方法前加上private关键字,防止用户直接调用

    2. __isset()和__unset()方法
      isset()函数用于检测变量是否存在,如果存在则返回true,否则返回false。而在面向对象中,通过isset()函数可以对公有的成员属性进行检测,但是对于私有的成员属性,这个函数就不起作用了,而魔术方法__isset()的作用就是帮助isset()函数检测私有成员属性。
      如果在对象中存在__isset()方法,当在类的外部使用isset()函数检测对象中的私有成员属性时,就会自动调用类中的__isset()方法完成对私有成员属性的检测操作。

      __unset()同上。

    3. __call()方法
      __call()方法的作用是当程序试图调用不存在或不可见的成员方法时,php会先调用__call()方法来存储方法名及其参数。
      __call()方法包含两个参数,即方法名和方法参数,其中,方法参数是以数组形式存在的。
      <?php
      	class MrSoft{
      		public function MingRi(){
      			echo "调用的方法存在,直接执行此方法";
      		}
      		public function __call($method,$parameter){
      			echo "如果方法不存在,则执行__call()方法.<br>";
      			echo "方法名为:".$method."<br>";
      			echo "方法参数有:";
      			var_dump( $parameter );
      		}
      	}
      	header('Content-Type:text/html;charset=utf-8');
      	$obj1 = new MrSoft();
      	$obj1->MingRi();
      	$obj1->MingR('how','what','why');
      
      ?>

      调用的方法存在,直接执行此方法
      如果方法不存在,则执行__call()方法.
      方法名为:MingR
      方法参数有:array(3) { [0]=> string(3) "how" [1]=> string(4) "what" [2]=> string(3) "why"}

    4. __toString()方法
      魔术方法__toString()的作用是当使用echo或print输出对象时,将对象转化为字符串。
      <?php
      class MrSoft{
      	private $type="php编程宝典";
      	public function __toString(){
      		return $this->type;
      	}
      }
      $mrsoft = new MrSoft();
      echo $mrsoft;
      ?>



    5. __autoload()方法
      将一个独立的、完整 的类保存到一个php页中,并且文件名和类名保持一致,这是每个开发人员都需要养成的良好习惯。这样,在下次重复使用某个类时就可以很轻松的找到它。但还有个问题,如果要在一个页面中引入很多的类,就需要使用include将类一个一个的引入。
      在php5中,应用__autoload()方法解决了这个问题。
      __autoload()方法可以自动实例化需要使用的类。当程序要用到一个类,但该类还没有被实例化时,php5将使用__autoload()方法在指定的路径下自动查找和该类名称相同的文件。如果找到则继续执行,否则报告错误。
      类MrSoft.class.php
      <?php
      class MrSoft{
      	private $cont;
      	public function __construct($cont){
      		$this->cont = $cont;
      	}
      	public function __toString(){
      		return $this->cont;
      	}
      }
      ?>

      index.php
      <?php
      function __autoload($class_name){
      	$class_path = $class_name.'.class.php';
      	if (file_exists($class_path)) {
      		include_once($class_path);
      	}else{
      		echo "类路径错误";
      	}
      }
      $mrsoft = new MrSoft("北京我爱你");
      echo $mrsoft;
      
      ?>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值