摘要: WePHP的表单令牌验证可以有效的防止表单重复提交和一部分远程表单提交(为什么是一部分,稍后解答)。 表单令牌验证和伪静态有一处兼容问题,所以在开启伪静态时,默认访问控制器下默认访问方法禁止设置表单令牌,往往是index.php/index/index。 关闭伪静态后删除.htaccess文件的跳转 阅读全文
posted @ 2013-03-02 16:51 saws 阅读(2689) 评论(0) 推荐(0) 编辑
摘要: 网上关于SPL spl_autoload_register的用法的例子有很多很多,自己也查看了很多,但感觉介绍得并不太详细,使自己真正能明白其中的原理苦闷了好一会儿。现将自己的理解记录下来。 关于 Standard PHP Library (SPL) 的 autoload 的方法,这些都是 PHP 5.1.2 之后才加上的方法。为了方便,这里做了一些设定。假设你有类文件,放在/home/user/class/foo.class.php, 你当前的文件为/home/user/webroot/test.php, 示例代码如下。在文件test.php中: 1 <?php 2 3 class.. 阅读全文
posted @ 2013-02-19 17:01 saws 阅读(7458) 评论(0) 推荐(0) 编辑
摘要: 串行化大概就是把一些变量转化成为字符串的字节流的形式,这样比较容易传输、存储。当然,关是传输存储没有什么,关键是变成串的形式以后还能够转化回来,而且能够保持原来数据的结构。在PHP中有多串行化处理的函数:serialize(),该函数把任何变量值(除了资源变量)转化为字符串的形式,可以把字符串保存到文件里,或者注册为Session,乃至于使用curl来模拟GET/POST来传输变量,达到RPC的效果。如果要将串行化的变量转化成PHP原始的变量值,那么可以使用unserialize()函数。一、变量串行化我们举简单的例子来说明串行化,以及它的存储格式。整型:以下为引用的内容: $var=23;  阅读全文
posted @ 2013-02-15 11:29 saws 阅读(319) 评论(0) 推荐(0) 编辑
摘要: 后期静态绑定从PHP 5.3.0开始,PHP增加一个叫做后期静态绑定的功能,拥有在继承范围内引用静态调用的类。该功能从语言内部角度考虑被命名为“后期静态绑定”。“后期绑定”的意思事说,static::不再被解析为定义当前方法所在的类,而是实际运行时计算的。因为它可以用于(但不限于)静态方法的调用。就是哪个类被最先实例化,static::就执行这个类里面的方法或者属性,不管自身处于被继承的类,还是多代继承。当使用self::或者class 对当前类静态引用,取决于定义当前方法所在的类: 1 <?php 2 class A{ 3 public static function who(){ 4 阅读全文
posted @ 2013-02-12 13:01 saws 阅读(425) 评论(0) 推荐(0) 编辑
摘要: PHP5中的对象比较要比PHP4中复杂,也比其它一般的面向对象语言复杂。当使用对比操作符(==)比较两个对象变量时,比较的原则:如果两个对象的属性和属性值都相等。而且两个对象是一个同一个类的实例,那么这两个对象变量相等。而如果使用全等操作符(===),这两个对象变量一定要指向某一个类的同一个实例(即同一个对象)。$o=new O(); $p=$o $p=&$o 都是全等。 1 <?php 2 function bool2str($bool) 3 { 4 if($bool === false){ 5 return 'FALSE'; 6 }else{ 7 ... 阅读全文
posted @ 2013-02-09 10:03 saws 阅读(272) 评论(0) 推荐(0) 编辑
摘要: PHP的对象实例化和对象赋值($a=new A();$b=$a),是引用赋值,但是又不完全一样,貌似叫个引用操作符复制,反正搞的云里雾里,到现在没具体搞明白。但是这个clone是彻底的拷贝 到新内存中 $b= clone $a;Final关键字父类中的方法被声明为final,则子类无法覆盖该方法;如果一个类被声明为final,则不能被继承。 1 <?php 2 class Faclass{ 3 function bar(){ 4 5 } 6 final function foo(){ 7 8 } 9 ... 阅读全文
posted @ 2013-02-08 18:19 saws 阅读(393) 评论(0) 推荐(0) 编辑
摘要: 魔术方法1.__get、__set这两个方法在为类和他们的父类中没有声明的属性设计的。◆__get($property)当调用一个未定义的属性时,此方法会被触发,传递的参数是被访问的属性名。◆__set($property,$value)给一个未定义的属性赋值时,此方法会被触发,传递的参数是被设置的属性名和值。这里的没有声明包括当使用对象调用时,访问控制为protected,private的属性(即没有权限访问的属性)。2.__isset __unset◆__isset($property)当在一个未定义的属性上调用isset()函数时调用此方法。◆__unset($property)当在一个 阅读全文
posted @ 2013-02-07 16:00 saws 阅读(205) 评论(0) 推荐(0) 编辑
摘要: Static关键字声明类成员或者方法为static,就可以不实例化类而直接访问。不能通过一个对象来访问其中的静态成员(静态方法除外)。 1 <?php 2 class Foo{ 3 public static $str=123; 4 static function bar(){ 5 echo "abv"; 6 } 7 } 8 var_dump(Foo::$str); 9 $foo=new Foo();10 var_dump($foo->str);// 输出为空11 //$foo->bar(); 12 ?>抽象类和抽象方法当我有多个类使用同一个方法时. 阅读全文
posted @ 2013-02-04 22:58 saws 阅读(421) 评论(0) 推荐(0) 编辑
摘要: 构造函数和析构函数此处要注意一个知识点,就是子类和父类他们的__construct和__destruct之间的关系,子类不会执行父类的__construct和__destruct除非在子类的__construct和__destruct中,通过parent::__construct()或parent::__destruct()调用 1 <?php 2 class Baseclass{ 3 function __construct(){ 4 print "In BaseClass construct\n"; 5 } 6 } 7 class Subclass ... 阅读全文
posted @ 2013-02-03 10:47 saws 阅读(306) 评论(0) 推荐(0) 编辑
摘要: 属性众所周知类的属性三个,public,private,protected。属性中的变量可以初始化,但是初始化的值必须是常数,这里的常数是指PHP脚本在编译阶段时就为常数,而不是在编译阶段之后在运行阶段算出的常数。也就说明下列声明的正确与否 1 <?php 2 class Simpleclass{ 3 //错误的声明 4 public $var1='hello'.'world'; 5 public $var2=<<<EOT 6 hello world 7 EOD; 8 public $var3=1+2; 9 public $var4=se 阅读全文
posted @ 2013-02-02 09:49 saws 阅读(242) 评论(0) 推荐(0) 编辑