- 浏览: 53689 次
- 性别:
- 来自: 济南
文章分类
最新评论
-
wangyalei:
phpgood 写道嗯嗯,挺全面的,但正则是很容易忘记的!我想 ...
php学习笔记(正侧表达式一) -
phpgood:
期待你分享更多的学习笔记!
php学习笔记(魔术方法的使用) -
phpgood:
好!
php学习笔记(魔术方法的使用) -
phpgood:
嗯嗯,挺全面的,但正则是很容易忘记的!我想问的是怎样才能比较牢 ...
php学习笔记(正侧表达式一) -
gryphone:
干嘛 吃素 这样人家会怀疑你的体质的 00X
最牛软件开发人员----自我评价
1 __construct().当实例一个对象时会先执行此方法,当子类实例化时会先执行父类的构造,这个没什么好说的和java,c#等oop语言一样。例如:
<?php class BaseClass { function __construct() { print "In BaseClass constructor\n"; } } class SubClass extends BaseClass { function __construct() { parent::__construct(); print "In SubClass constructor\n"; } } $obj = new BaseClass(); $obj = new SubClass(); //In BaseClass constructor In BaseClass constructor In SubClass constructor ?>
2.__destruct析构方法的概念和其他面向对象的语言(比如java(垃圾回收机制))是一样的。当指向这个对象的最后一个引用被销毁的时候,析构方法被调用,调用完成后释放内存。(先销毁父类在子类)注意:析构方法不接受任何参数。
<?php class MyDestructableClass { function __construct() { print "In constructor\n"; $this->name = "MyDestructableClass"; } function __destruct() { print "Destroying " . $this->name . "\n"; } } $obj = new MyDestructableClass(); //In constructor Destroying MyDestructableClass ?>
3。__autoload()拦截函数在一个未声明的类被初始化的时候自动调用。该类的名字会被自动传递给__autoload()函数。而__autoload()也只有这么唯一的一个参数。
<?php class ClassName{ public function __construct(){ echo "加载me"; } } ?>
<?php function __autoload($className) { include_once $className . ".php"; } $object = new ClassName();//加载me ?>
4. __get传递属性的名字 并返回属性的值 __set 传递属性的名字 和新的值,两个是一般是一起使用的,不过与java中的getter setter有一点不一样,看例子
<?php class StrictCoordinateClass{ private $arr = array('x'=>NULL,'y'=>NULL); public function __get($property){ echo "key--------------->".$property; echo "<br>"; if(array_key_exists($property,$this->arr)){ return $this->arr[$property]; }else{ echo "没有找到这一个属性"; } } public function __set($property,$value){ echo "property------------------->".$property."<br>"; echo "value---------------------->".$value."<br>"; if(array_key_exists($property,$this->arr)){ $this->arr[$property] = $value; }else{ print "__set错误"; } } } $obj = new StrictCoordinateClass(); $obj->x = 1;//进行set 赋值 echo $obj->x;//get方法取值 echo "<br>"; $obj->n = 2; print $obj->n; //property------------------->x //value---------------------->1 //key--------------->x //1 //property------------------->n //value---------------------->2 //__set错误key--------------->n //没有找到这一个属性 ?>
5..__call 有点像c#中的委托 传递方法的名字和一个数字索引数字 数组包含传递的参数 第一参数的索引0
<?php class HelloWorld { function display($count) { for ($i = 0; $i < $count; $i++) { print "Hello world\n"; } return $count; } } class HelloWorldDelegator { private $obj; function __construct() { $this->obj = new HelloWorld(); } function __call($method, $args) { echo "method---------------->" . $method; echo "<br>"; echo "args------------------>" . print_r($args, true); //call_user_func_array("回调函数(对象,方法)",数组参数) return call_user_func_array(array ( $this->obj, $method ), $args); } } $obj = new HelloWorldDelegator(); print $obj->display(3); //method---------------->display //args------------------>Array ( [0] => 3 ) Hello world Hello world Hello world 3 ?>
总结:
//php能通过实现特殊的代理方法对属性的访问和方法的调用进行重载 //function __get($property);__get 传递属性的名字 并返回属性的值 //function __set($property,$value);//传递属性的名字 和新的值 //function __call($method,$args);//传递方法的名字和一个数字索引数字 数组包含传递的参数 第一参数的索引0 //__get __set是对成员属性来说 __call 是 对方法来说
<?php /* * Created on 2010-8-26 * * 魔术方法的使用 * */ class Test { /******* * @param string 属性的名称 */ public function __get($key) { echo $key . " 不存在"; } /******* * @param string 要赋值的成员变量名称 * @param string 要赋的值 */ public function __set($key,$value){ echo "对".$key."赋值".$value; } /****** * @param string 方法名 * @param array 参数列表 * */ public function __call($key,$args){ echo "您要调用的 {$key} 方法不存在。你传入的参数是:" . print_r($args, true); } } $t = new Test(); echo $t->name; echo "<br>"; $t->name = "aninggo"; echo "<br>"; $t->getName("asdf","go"); //name 不存在 //对name赋值aninggo //您要调用的 getName 方法不存在。你传入的参数是:Array ( [0] => asdf [1] => go )
发表评论
-
php学习笔记(正侧表达式一)
2010-08-29 22:55 1269字符 说明 ^ ... -
php学习笔记(开发中常设置的内置函数)
2010-08-23 22:48 1646为了使自己的程序在不同的平台中拥有更好的兼容性,很多时候我们都 ... -
目录操作
2010-08-23 15:31 0皆さんこんにちは、まず自己紹介させていただき、私は第1事業部の ... -
php学习笔记(日期函数用法总结)
2010-08-22 13:36 1343php中对时间日期的处理时相对简单的,php中提供了date ... -
php学习笔记(数组函数用法总结)
2010-08-21 11:24 0array -
php学习笔记(预防session拦截)
2010-08-20 21:21 0拦截 -
php学习笔记(异常处理)
2010-08-20 15:10 0exception -
php学习笔记(过滤器)
2010-08-20 14:29 0过滤器 -
php学习笔记(国际化)
2010-08-20 14:00 0国际化 -
php学习笔记(防sql注入)
2010-08-20 13:59 0sql注入 -
php学习笔记(数字函数用法总结)
2010-08-20 13:53 0数字 -
php学习笔记(上传与下载类)
2010-08-19 21:30 1312php中的文件上传很简单 不像java 中需要借助 commo ... -
php学习笔记(序列化应用)
2010-08-18 10:22 746//php中的序列化 //大部分用与 处理数组传递,数组存库 ... -
php学习笔记(搜索引擎)
2010-08-17 21:34 0搜索引擎 -
php学习笔记(反射机制)
2010-08-17 21:00 0反射 -
php学习笔记(仿百度分页类)
2010-08-17 20:59 2299本类能够实现像百度、谷歌一样的分页效果 ***** ... -
php学习笔记(php.inc的配置详解)
2010-08-15 11:45 1189学习php 先要了解一下php的配置 对以后的学习很有帮助 , ... -
php学习笔记(svs)
2010-08-15 11:41 0svd -
php学习笔记(字符过滤类)
2010-08-15 00:55 0过滤 -
php学习笔记(HTTP认证)
2010-08-14 13:20 0http
相关推荐
例如,如果我们希望`$name`属性在类外部不可直接访问,可以将其设为`private`,并使用`__get()`和`__set()`魔术方法来间接访问: ```php Class Person { private $name; function __get($name) { if ($name == '...
以上只是PHP学习笔记中的一部分内容,实际上PHP还有许多高级特性,如错误日志、命名空间、 Traits、魔术方法等。通过深入学习和实践,你可以掌握PHP并利用它构建复杂的Web应用程序。这份笔记旨在为初学者提供一个...
这部分内容还可能涵盖命名空间、魔术方法、反射、以及PHP的内置对象模型如PDO用于数据库操作,以及Session和Cookie的使用,这些都是PHP开发中不可或缺的部分。 然后,《PHP100教程96~112讲.docx》可能会讨论更高级...
2. **`__get()`和`__set()`**:这两个魔术方法允许开发者为类提供动态属性访问。`__get()`方法在尝试访问不存在的公共或受保护属性时被调用,而`__set()`则在尝试设置此类属性时被调用。 - **示例**:在`MyPc`类中...
【PHP学习笔记】是一份全面的教程资源,旨在帮助初学者快速掌握PHP编程语言的基础和进阶知识。这份笔记包含了从基本语法到高级特性的详细讲解,是学习PHP的理想起点。 1. **PHP基础语法**(01_PHP语法.doc):这...
魔术方法是PHP中以两个下划线`__`开头的特殊方法,它们会在特定条件下自动调用。例如,`__construct()`用于对象初始化,`__destruct()`在对象销毁前执行,`__get()`和`__set()`处理未定义的属性读写,`__call()`和`...
HTML+CSS笔记部分是PHP学习的前置知识,因为PHP常常用于动态生成网页。这部分会介绍HTML的结构元素,如标签、段落、标题,以及CSS的样式规则,如选择器、属性和值,如何实现页面布局和美化。理解HTML和CSS能帮助...
3. **魔术方法**:`__get()`和`__set()`是PHP的魔术方法,用于访问和修改对象的私有属性。`__get()`返回指定字段的值,而`__set()`则设置字段的值。 4. **静态方法**: - `validateUsername()`:这是一个静态方法...
### Laravel 5 学习笔记知识点汇总 #### 环境配置与初始化 - **环境配置**:在开始使用 Laravel 5 前,需要确保系统安装了 PHP、Composer 和其他必要的开发工具。 - **`.env` 文件**:这是一个包含应用配置参数的...
7. **PHP5的内置函数和新特性**:第十四章可能涵盖了PHP5的新特性,比如析构函数、魔术方法、类型提示、数组对象等。析构函数在对象销毁时自动执行,魔术方法如`__get`和`__set`提供了动态属性访问的便利。数组对象...
构造方法的定义,方法名是一个固定的, * 在php4中:和类名相同的方法就是构造方法 * 在php5中:构造方法选择使用 魔术方法__construct() 所有类中声明构造方法都使用这个名称 * 优点:在改变类名时,构造方法不用改变...
笔记将详细阐述MySQL数据库的使用,包括SQL语言的基本操作(如SELECT、INSERT、UPDATE、DELETE),以及如何使用PHP连接和操作MySQL数据库,如PDO(PHP Data Objects)或mysqli扩展的使用方法。 在高级主题中,笔记...
7. **PHP魔术方法**:理解__construct、__destruct、__get、__set等魔术方法的作用和使用场景。 【PHP高级篇】 1. **PHP性能优化**:讨论PHP性能瓶颈及优化策略,如缓存技术、代码优化等。 2. **PHP框架**:如...
数组则用于存储多个值,笔记将涵盖索引数组、关联数组以及多维数组的使用方法。 3. 文件与目录操作:PHP能方便地进行文件I/O操作,如读取、写入、复制、删除等。笔记会详细介绍文件处理函数,如fopen/fwrite/fclose...
PHP的**重载(Overloading)**是指当尝试访问不存在或权限不足的属性或方法时,会触发魔术方法,如`__get()`和`__call()`。这些方法允许在运行时动态处理类的属性和方法。 **序列化(Serialization)**和**反序列化...
总体来说,本篇PHP学习笔记包含了PHP的基本语法、面向对象编程的高级特性、设计模式的实际应用以及数据的序列化与反序列化等内容,这些内容是构建PHP应用程序时不可或缺的部分。对于想要学习PHP或者加深对PHP理解的...
3. **脚本标记**:`<script language="php">php代码</script>`,这是一种较为老式的标记方法,不推荐使用。 4. **标准标记**:`<?php php代码 ?>`,这是最常用的标记方式。 5. **XML风格**:`<? php php代码 ?>`,...