- 浏览: 46218 次
- 性别:
- 来自: 北京
文章分类
最新评论
先来看一个例子:
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类的精缩归纳
2010-08-06 15:52 721一:结构和调用(实例化 ... -
用array_flip()删除数组重复元素
2010-08-06 14:52 817在PHP中,用于删除数组中重复元素有一个可用的函数,那 ... -
PHP浮点数比较不准
2010-08-06 11:52 1243首先看一段代码: <?php$a = 0.1;$b = ... -
EOT用法
2010-08-06 11:21 1065批量输出HTML内容!echo <<< EO ... -
global变量解析
2010-08-06 11:15 7711 Global的作用是定义全局变量,但是这个全局变量不是应 ... -
$_SERVER的详细用法
2010-08-06 11:05 880$_SERVER['PHP_SELF'] #当前正在执行脚本的 ... -
include()语句与require()语句
2010-08-06 10:52 663如果要根据条件或循环包含文件,需要使用include()。re ... -
call_user_func与call_user_func_array
2010-08-06 10:08 973call_user_func函数类似于 ... -
PHP在双引号中写入变量的注意点
2010-08-06 09:30 947<?php $b=3;echo "$b这里有一 ... -
php中声明与定义
2010-08-06 09:27 573<?php$a;var_dump(isset($a)); ... -
PHP变量的作用域
2010-08-06 09:19 835局部变量指的是函数体里面变量,而if语句,for语句里面声明的 ... -
echo的逗号与点号
2010-08-06 09:12 792echo中是可以用逗号来连接字符串的 比如: echo ' ... -
set_time_limit
2010-08-04 21:45 1735第一 set_time_limit(0)长连接的实现 ... -
php格式化打印数组,调试有用
2010-06-08 14:43 1581以下是从fleaphp上挖来的,感谢fleaphp的开发者们。 ... -
php常识
2010-04-12 15:48 639一 时区问题 当前时间为 2010-04-12 15:46:1 ... -
简单文件上传例子
2010-04-12 15:40 695up.html文件内容如下 <html> &l ...
相关推荐
本文实例讲述了PHP中ini_set与ini_get的用法。分享给大家供大家参考。具体如下: PHP ini_set函数。 PHP ini_set函数是设置选项中的值,在执行函数后生效,脚本结束的时候,这个设置也失效。不是所有的选项都能被该...
本篇文章主要是对PHP中ini_set和ini_get函数的用法进行了总结介绍,需要的朋友可以过来参考下,希望对大家有所帮助
但是,对属性的读取 和赋值操作是非常频繁的,因此在PHP5 中,预定义了两个函数“__get()”和“__set()”来获 取和赋值其属性,以及检查属性的“__isset()”和删除属性的方法“__unset()”。 上一节中,我们为每个...
但是,对属性的读取和赋值操作是非常频繁的,因此在PHP5中,预定义了两个函数“__get()”和“__set()”来获取和赋值其属性。类似于java中的javabean的操作,使用的方法也类似,只是不需要像javabean中那样,对每个...
但是,对属性的读取和赋值操作是非常频繁的,因此在PHP5中,预定义了两个函数“__get()”和“__set()”来获取和赋值其属性,以及检查属性的“__isset()”和删除属性的方法“__unset()”。 我们为每个属性做了设置和...
php规定以两个下划线(__)开头的方法都保留为魔术方法,所以建议大家函数名最好不用__开头,除非是为了重载已有的魔术方法。 PHP中的魔术方法有 :__construct, __destruct , __call, __callStatic,__get, __set, ...
这里就简单介绍两种: 一、增加超时的时间限制 这里需要注意:set_time_limit只是设置你的PHP程序的超时时间,而不是file_get_contents函数读取URL的超时时间。 我一开始以为set_time_limit也能影响到file_get_...
本文实例讲述了PHP中set_include_path()函数相关用法。分享给大家供大家参考,具体如下: 先看如下代码: <?php /** 定义根目录 */ define('__TYPECHO_ROOT_DIR__', dirname(__FILE__)); /** 定义插件目录(相对...
php的配置函数就是几个ini_*的函数,主要是针对配置文件的操作,其实就四个函数:ini_get、ini_set、ini_get_all、ini_restore。本文详细介绍了这四个ini函数。
增加超时的时间限制 这里需要注意:set_time_limit只是设置你的PHP程序的超时时间,而不是file_get_contents函数读取URL的超时时间。真正的修改 file_get_contents延时可以用resource $context的timeout参数: 复制...
php 魔术函数 1。__construct() 实例化对象时被调用, 当__construct和以类名为...若不存在,则会调用__get函数。 5。__set() 设置一个对象的属性时, 若属性存在,则直接赋值; 若不存在,则会调用__set函数。 6
总的来说, 有下面几个魔术函数 __construct() __destruct() __get() __set() __isset() __unset() __call() __callStatic() __sleep() __wakeup() __toString() __set_state() __clone() __autoload() __construct...
php 的配置函数就是几个ini_*的函数,主要是针对配置文件的操作,其实就四个函数:ini_get、ini_set、ini_get_all、ini_restore。个人感觉最有用的就是ini_set和ini_get。 * ini_get():获取配置文件的选项值 这个...
php的配置函数就是几个ini_*的函数,主要是针对配置文件的操作,其实就四个函数:ini_get、ini_set、ini_get_all、ini_restore。个人感觉最有用的就是ini_set和ini_get。 * ini_get():获取配置文件的选项值 这个...
* __set 和 __get * 静态成员 构造函数和析构函数 在 PHP4 中,当函数与对象同名时,这个函数将成为该对象的构造函数,并且在 PHP4 中没有析构函数的概念。 在 PHP5 中,构造函数被统一命名为 __...
某些特定操作的时候需要访问和赋值封装的类型,这个时候我们就需要其他的函数帮我们完成这些操作,PHP为我们提供了个方法名:__set() , __get()__set() 取得当前类中封装过私有属性或者方法重新执行或赋值操作__get...
3、amqp_set_sockfd(将connection和sockfd进行绑定) 4、amqp_login(用于登录RabbitMQ server,主要目的为了进行权限管理) 5、amqp_channel_open(用于关联conn和channel) 6、amqp_exchange_declare(声明exchange) 7...