`

PHP5之_set和_get函数

阅读更多

先来看一个例子:

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一些搞定。

 

分享到:
评论

相关推荐

    PHP中ini_set与ini_get用法实例

    本文实例讲述了PHP中ini_set与ini_get的用法。分享给大家供大家参考。具体如下: PHP ini_set函数。 PHP ini_set函数是设置选项中的值,在执行函数后生效,脚本结束的时候,这个设置也失效。不是所有的选项都能被该...

    PHP中ini_set和ini_get函数的用法小结

    本篇文章主要是对PHP中ini_set和ini_get函数的用法进行了总结介绍,需要的朋友可以过来参考下,希望对大家有所帮助

    php面向对象全攻略 (六)__set() __get() __isset() __unset()的用法

    但是,对属性的读取 和赋值操作是非常频繁的,因此在PHP5 中,预定义了两个函数“__get()”和“__set()”来获 取和赋值其属性,以及检查属性的“__isset()”和删除属性的方法“__unset()”。 上一节中,我们为每个...

    PHP中__get()和__set()的用法实例详解

    但是,对属性的读取和赋值操作是非常频繁的,因此在PHP5中,预定义了两个函数“__get()”和“__set()”来获取和赋值其属性。类似于java中的javabean的操作,使用的方法也类似,只是不需要像javabean中那样,对每个...

    浅谈PHP拦截器之__set()与__get()的理解与使用方法

    但是,对属性的读取和赋值操作是非常频繁的,因此在PHP5中,预定义了两个函数“__get()”和“__set()”来获取和赋值其属性,以及检查属性的“__isset()”和删除属性的方法“__unset()”。 我们为每个属性做了设置和...

    php常见的魔术方法详解

    php规定以两个下划线(__)开头的方法都保留为魔术方法,所以建议大家函数名最好不用__开头,除非是为了重载已有的魔术方法。  PHP中的魔术方法有 :__construct, __destruct , __call, __callStatic,__get, __set, ...

    PHP file_get_contents 函数超时的几种解决方法

    这里就简单介绍两种: 一、增加超时的时间限制 这里需要注意:set_time_limit只是设置你的PHP程序的超时时间,而不是file_get_contents函数读取URL的超时时间。 我一开始以为set_time_limit也能影响到file_get_...

    PHP中set_include_path()函数相关用法分析

    本文实例讲述了PHP中set_include_path()函数相关用法。分享给大家供大家参考,具体如下: 先看如下代码: &lt;?php /** 定义根目录 */ define('__TYPECHO_ROOT_DIR__', dirname(__FILE__)); /** 定义插件目录(相对...

    PHP最常用的四个ini函数

    php的配置函数就是几个ini_*的函数,主要是针对配置文件的操作,其实就四个函数:ini_get、ini_set、ini_get_all、ini_restore。本文详细介绍了这四个ini函数。

    深入php函数file_get_contents超时处理的方法详解

    增加超时的时间限制 这里需要注意:set_time_limit只是设置你的PHP程序的超时时间,而不是file_get_contents函数读取URL的超时时间。真正的修改 file_get_contents延时可以用resource $context的timeout参数: 复制...

    php魔法函数与魔法常量使用介绍

    php 魔术函数 1。__construct() 实例化对象时被调用, 当__construct和以类名为...若不存在,则会调用__get函数。 5。__set() 设置一个对象的属性时, 若属性存在,则直接赋值; 若不存在,则会调用__set函数。 6

    php 魔术函数使用说明

    总的来说, 有下面几个魔术函数 __construct() __destruct() __get() __set() __isset() __unset() __call() __callStatic() __sleep() __wakeup() __toString() __set_state() __clone() __autoload() __construct...

    PHP 的几个配置文件函数

    php 的配置函数就是几个ini_*的函数,主要是针对配置文件的操作,其实就四个函数:ini_get、ini_set、ini_get_all、ini_restore。个人感觉最有用的就是ini_set和ini_get。 * ini_get():获取配置文件的选项值 这个...

    PHP配置文件中最常用四个ini函数

    php的配置函数就是几个ini_*的函数,主要是针对配置文件的操作,其实就四个函数:ini_get、ini_set、ini_get_all、ini_restore。个人感觉最有用的就是ini_set和ini_get。 * ini_get():获取配置文件的选项值 这个...

    PHP学习手册(PHP知识大全)

     * __set 和 __get  * 静态成员  构造函数和析构函数  在 PHP4 中,当函数与对象同名时,这个函数将成为该对象的构造函数,并且在 PHP4 中没有析构函数的概念。  在 PHP5 中,构造函数被统一命名为 __...

    PHP100视频教程 19:PHP面向对象开发的学习(三)

    某些特定操作的时候需要访问和赋值封装的类型,这个时候我们就需要其他的函数帮我们完成这些操作,PHP为我们提供了个方法名:__set() , __get()__set() 取得当前类中封装过私有属性或者方法重新执行或赋值操作__get...

    rabbitmq的接口函数说明,api参数使用说明

    3、amqp_set_sockfd(将connection和sockfd进行绑定) 4、amqp_login(用于登录RabbitMQ server,主要目的为了进行权限管理) 5、amqp_channel_open(用于关联conn和channel) 6、amqp_exchange_declare(声明exchange) 7...

Global site tag (gtag.js) - Google Analytics