• __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 新增的东西还是很多,在此,旨在通过这两个方法的介绍,希望能给大家一些启示。所谓手册、书籍能够交给的你的东西仅仅只是一些基本的用法而已,更多的技 巧、设计思想等,还需你在平时的工作不断积累、思考、沉淀,正所谓“师傅领进门,修行在个人”,学习最重要的还是在自己。
  • 相关阅读:
    无法将类型“XXX”隐式转换为“XXX[]”(Cannot implicitly convert type 'XXX' to 'XXX[]')
    VS2010验证时出错。HRESULT = '8000000A'
    Linux Command Tips
    RealVNC 使用手册
    PL/SQL Developer自动补全SQL技巧
    Install dnsutils(dig, nslookup, host) On iPhone
    asp.net压缩图片
    Discuz论坛密码加密方式详解
    三种SQL分页法效率分析
    Mysql数据库服务器配置文件/etc/my.cnf的详细配置
  • 原文地址:https://www.cnblogs.com/xiongsd/p/3064111.html
Copyright © 2020-2023  润新知