__get和__set 方法的使用

PHP5之_set和_get函数

接触PHP5也有一段时间了,尽管PHP5出了很长时间了,但大家对PHP5还是不甚感冒。在我的BLOG里讲一天PHP5的东西,希望能够对推动PHP5有所贡献。

先来看一个例子:

class UserInfo{
   var $UserName = ’’;
   var $PassWord = ’’;
   var $Birthday = ’’;
}

这个例子我想很多人在PHP4种也有用到,接下来给对象属性进行付值:

$oUserInfo = new UserInfo;
$oUserInfo->UserName = '木目';
$oUserInfo->PassWord = '123456';
$oUserInfo->Birthday = '1978-08-16';
$oUserInfo->age       = 27;

echo "用户名:".$oUserInfo->UserName."<br/>\n";
echo "密   码:".$oUserInfo->PassWord."<br/>\n";
echo "生   日:".$oUserInfo->Birthday."<br/>\n";

上 面的代码在PHP4、PHP5种运行起来并不会发生任何问题。然而实际使用中我并不希望给对象没有定义的属性进行付之操作,我希望的是编程的人员能够严格 按照我所设计的结构进行,这个时候在PHP4中就无能为力了。如果你正在试用PHP5,那我告诉你一个好消息,这个问题在PHP5中的有了较好的解决,虽 然并不完美。那就是__set和__get我们来利用PHP5的一些特性改写一下上面的代码看看会发生什么问题:

class UserInfo1{
   var $UserName = ’’;
   var $PassWord = ’’;
   var $Birthday = ’’;
   function __set($property,$value){
     echo "对不起,你要设置的属性({$property}=>{$value})不存在<br>";
   }
   function __get($property){
     echo "对不起,你要获取的属性({$property})不存在<br>";
   }
}
$oUserInfo1 = new UserInfo1;
$oUserInfo1->UserName = '木目子';
$oUserInfo1->PassWord = '123456';
$oUserInfo1->Birthday = '1978-08-16';
$oUserInfo1->age       = 27;

echo "用户名:".$oUserInfo1->UserName."<br/>\n";
echo "密   码:".$oUserInfo1->PassWord."<br/>\n";
echo "生   日:".$oUserInfo1->Birthday."<br/>\n";

运行一下看看会发生什么,仔细想想就不难发现__set和__get的作用了。但让__set和__get的用途远远不止这些,这只是一个很简单的例子。

class UserInfo2{
   private $aData = array();
}
$oUserInfo2 = new UserInfo2;
$oUserInfo2->aData['UserName'] = '木目子';
$oUserInfo2->aData['PassWord'] = '123456';
$oUserInfo2->aData['Birthdat'] = '1978-08-16';

echo "用户名:".$oUserInfo2->aData['UserName'] ."<br/>\n";
echo "密   码:".$oUserInfo2->aData['PassWord'] ."<br/>\n";
echo "生   日:".$oUserInfo2->aData['Birthday'] ."<br/>\n";

显然,这段代码会出错的,因为aData是UserInfo的私有属性,不能直接在外部使用,那现在问题是必须要给aData进行付值,这个时候__set和__get就排上用场了:

class UserInfo3{
   //private $aData = array();
   private $aData = array();
   function __set($property,$value){
     $this->aData[$property] = $value;
   }
   function __get($property){
     return $this->aData[$property];
   }
}
$oUserInfo3 = new UserInfo3;
$oUserInfo3->aData['UserName'] = '木目子';
$oUserInfo3->aData['PassWord'] = '123456';
$oUserInfo3->aData['Birthdat'] = '1978-08-16';

echo "用户名:".$oUserInfo3->aData['UserName'] ."<br/>\n";
echo "密   码:".$oUserInfo3->aData['PassWord'] ."<br/>\n";
echo "生   日:".$oUserInfo3->aData['Birthday'] ."<br/>\n";

再来运行一下看看,OK一些搞定。

PHP5 新增的东西还是很多,在此,旨在通过这两个方法的介绍,希望能给大家一些启示。所谓手册、书籍能够交给的你的东西仅仅只是一些基本的用法而已,更多的技 巧、设计思想等,还需你在平时的工作不断积累、思考、沉淀,正所谓“师傅领进门,修行在个人”,学习最重要的还是在自己。
原文地址:https://www.cnblogs.com/xiongsd/p/3064111.html