记录我的一些生活写照、无聊的牢骚、内心世界的活动 注册 | 登陆

PHP5之__set和__get

先来看一个例子:

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

Tags: php

« 上一篇 | 下一篇 »

只显示10条记录相关文章

PHP5.2.0正式发布 (浏览: 5069, 评论: 0)
PHP的扩展和嵌入---一本不错的书 (浏览: 42894, 评论: 0)
微软淘汰甲骨文 以1.13亿美元控股Zend (浏览: 5887, 评论: 0)
有关PHP4和PHP5不兼容的问题 (浏览: 36821, 评论: 3)
PHP6即将出炉了,看看都有什么新东西! (浏览: 2859, 评论: 0)
Minutes PHP Developers Meeting (浏览: 2884, 评论: 0)
PHP5.1终于又出来了 (浏览: 3668, 评论: 0)
截取中英文混排字符串的函数 (浏览: 3239, 评论: 0)
Windows下的Apache+MySQL+PHP运行环境的搭建基础篇 (浏览: 4389, 评论: 1)
一部经典之作《PHP 5 Power Programming》 (浏览: 34362, 评论: 2)

Trackbacks

点击获得Trackback地址,Encode: UTF-8 点击获得Trackback地址,Encode: GB2312 or GBK 点击获得Trackback地址,Encode: BIG5

发表评论

评论内容 (必填):