- 浏览: 47408 次
- 性别:
- 来自: 北京
文章分类
最新评论
先来看一个例子:
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 752一:结构和调用(实例化 ... -
用array_flip()删除数组重复元素
2010-08-06 14:52 839在PHP中,用于删除数组中重复元素有一个可用的函数,那 ... -
PHP浮点数比较不准
2010-08-06 11:52 1269首先看一段代码: <?php$a = 0.1;$b = ... -
EOT用法
2010-08-06 11:21 1090批量输出HTML内容!echo <<< EO ... -
global变量解析
2010-08-06 11:15 7951 Global的作用是定义全局变量,但是这个全局变量不是应 ... -
$_SERVER的详细用法
2010-08-06 11:05 920$_SERVER['PHP_SELF'] #当前正在执行脚本的 ... -
include()语句与require()语句
2010-08-06 10:52 686如果要根据条件或循环包含文件,需要使用include()。re ... -
call_user_func与call_user_func_array
2010-08-06 10:08 994call_user_func函数类似于 ... -
PHP在双引号中写入变量的注意点
2010-08-06 09:30 967<?php $b=3;echo "$b这里有一 ... -
php中声明与定义
2010-08-06 09:27 596<?php$a;var_dump(isset($a)); ... -
PHP变量的作用域
2010-08-06 09:19 847局部变量指的是函数体里面变量,而if语句,for语句里面声明的 ... -
echo的逗号与点号
2010-08-06 09:12 820echo中是可以用逗号来连接字符串的 比如: echo ' ... -
set_time_limit
2010-08-04 21:45 1753第一 set_time_limit(0)长连接的实现 ... -
php格式化打印数组,调试有用
2010-06-08 14:43 1606以下是从fleaphp上挖来的,感谢fleaphp的开发者们。 ... -
php常识
2010-04-12 15:48 655一 时区问题 当前时间为 2010-04-12 15:46:1 ... -
简单文件上传例子
2010-04-12 15:40 727up.html文件内容如下 <html> &l ...
相关推荐
ini_get函数的作用与ini_set相反,它用于获取PHP配置选项的当前值。在实际开发中,我们可能需要确认某个配置选项的值,以确保我们的脚本按预期工作,这时就可以使用ini_get函数。它的语法非常简单,只需要传递一个...
本文实例讲述了PHP中ini_set与ini_get的用法。分享给大家供大家参考。具体如下: PHP ini_set函数。 PHP ini_set函数是设置选项中的值,在执行函数后生效,脚本结束的时候,这个设置也失效。不是所有的选项都能被该...
在PHP面向对象编程中,`__get()`, `__set()`, `__isset()`, 和 `__unset()` 是四个非常重要的魔术方法,它们允许开发者在访问不存在或者不可见的类属性时提供一种处理机制。这些方法是PHP5引入的特性,主要用于增强...
总之,`set_include_path()`函数是PHP中一个非常实用的工具,它允许程序员自定义文件包含的搜索路径,提高代码的可读性和安全性。通过合理使用,可以更好地组织项目结构,同时减少因文件路径更改而进行的大量代码...
在PHP的历史版本中,这个函数用于开启或关闭魔术引号的运行时行为,这是一项安全特性,用于自动对GET、POST和COOKIE数据中的特殊字符进行转义处理,以防止SQL注入等安全问题。但随着PHP版本的更新和改进,`magic_...
但是,对属性的读取和赋值操作是非常频繁的,因此在PHP5中,预定义了两个函数“__get()”和“__set()”来获取和赋值其属性,以及检查属性的“__isset()”和删除属性的方法“__unset()”。 我们为每个属性做了设置和...
在PHP编程中,ini函数主要用于处理和操作PHP配置文件(php.ini)的设置。以下是PHP最常用的四个ini函数的详细说明: 1. **ini_get()**:此函数用于获取php.ini配置文件中指定选项的当前值。如果选项值为布尔类型,...
首先,我们要明确一点:`set_time_limit` 函数仅用于设置整个PHP脚本的执行时间限制,并不能直接影响`file_get_contents`函数的超时设置。如果你发现`file_get_contents`在获取远程URL时超时,需要通过创建自定义的...
php规定以两个下划线(__)开头的方法都保留为魔术方法,所以建议大家函数名最好不用__开头,除非是为了重载已有的魔术方法。 PHP中的魔术方法有 :__construct, __destruct , __call, __callStatic,__get, __set, ...
这篇文章详细总结了PHP5中常用的一些函数,涉及到延迟执行、字符串和二进制处理、文件处理、网络连接、ZIP文件操作以及XML处理等多个方面。以下是对这些函数知识点的详细解释: 1. **延迟代码执行函数**: - `...
在PHP编程语言中,魔术函数和常量是其高级特性之一,它们能够在特定条件下自动触发,无需显式调用,从而极大地增强了代码的灵活性和功能。以下是对标题、描述及部分给定内容中提及的PHP魔术函数和常量的详细解析。 ...
`set_include_path` 是 PHP 中的一个内置函数,用于在运行时动态修改 PHP 的 `include_path` 配置。`include_path` 是一个特殊路径列表,PHP 使用它来查找要包含的文件(如类库、头文件等)。当使用 `require`、`...
5. `date()`: PHP日期和时间处理的重要函数,可以根据特定格式输出当前或者任意时间的日期和时间,对于构建动态网页,尤其是涉及到时间展示和处理的应用十分关键。 6. `mysql_connect()`: 这是PHP与MySQL数据库进行...
`error_reporting()`和`ini_set('display_errors')`控制错误报告。为了记录错误,可以使用`error_log()`将错误信息写入日志。 8. **安全考虑** 在进行文件操作时,必须注意避免路径注入和跨站脚本攻击。使用`...
本文实例讲述了PHP中set_include_path()函数相关用法。分享给大家供大家参考,具体如下: 先看如下代码: <?php /** 定义根目录 */ define('__TYPECHO_ROOT_DIR__', dirname(__FILE__)); /** 定义插件目录(相对...
3. PHP_操作与信息函数.pdf:这部分涵盖了获取和操作PHP系统信息的函数,如`phpinfo()`用于显示PHP配置信息,`ini_get()`和`ini_set()`用于获取或设置PHP配置选项,`getenv()`获取环境变量,以及`phpversion()`获取...
构造函数和析构函数用于对象的生命周期管理,而魔术方法如`__get`、`__set`则提供了对未定义属性的动态访问。 **4. 面向对象的特性** PHP5引入了接口(Interface)和抽象类(Abstract Class),实现了多态性。类...
在PHP编程中,`set_include_path` 和 `get_include_path` 是两个非常重要的函数,它们与文件包含(如 `include` 和 `require`)密切相关。理解并熟练运用这两个函数可以帮助开发者更好地组织和管理项目中的文件结构...
除了魔术变量,PHP还有魔术函数,如`__construct()`用于对象的构造,`__destruct()`用于对象销毁,`__get()`和`__set()`处理未定义的属性访问,`__call()`和`__callStatic()`处理未定义的方法调用等。这些函数可以...