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

先来看一个例子:

class UserInfol
  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/>rn"
echo "密  码:".$oUserInfo->PassWord."<br/>rn"
echo "生  日:".$oUserInfo->Birthday."<br/>rn"

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

class UserInfol
  var 
$UserName = ’’;
  var $PassWord = ’’; 
  var $Birthday = 
’’; 
  function __set($property,$value){ 
    echo "对不起,你要设置的属性({$property}=>{$value}
)不存在"
  } 

  function __get($property){ 
    echo "对不起,你要获取的属性({$property})不存在"
  }
}
$oUserInfo = new UserInfo
$oUserInfo->UserName = ’木目子
$oUserInfo->PassWord = 
123456;
$oUserInfo->Birthday = 
1978-08-16; 
$oUserInfo->age      = 27;

echo "用户名:".$oUserInfo->UserName."<br/>rn"; 
echo "密  码:".$oUserInfo->PassWord."<br/>rn"; 
echo "生  日:".$oUserInfo->Birthday."<br/>rn";
    运行一下看看会发生什么,仔细想想就不难发现__set和__get的作用了。但让__set和__get的用途远远不止这些,这只是一个很简单的例子。


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

echo "用户名:".$oUserInfo->aData[UserName’] ."<br/>rn"; 
echo "密  码:".$oUserInfo->aData[PassWord’] ."<br/>rn"; 
echo "生  日:".$oUserInfo->aData[Birthday’] ."<br/>rn";

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

class UserInfo
  
private $aData = array(); 
  function 
__set($property,$value){ 
    
$this->aData[$property] = $value
  } 
  function 
__get($property){ 
    return 
$this->aData[$property]; 
  } 
}

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

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

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

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