随笔分类 - PHP手册的碎碎念
摘要:网上关于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
摘要:串行化大概就是把一些变量转化成为字符串的字节流的形式,这样比较容易传输、存储。当然,关是传输存储没有什么,关键是变成串的形式以后还能够转化回来,而且能够保持原来数据的结构。在PHP中有多串行化处理的函数:serialize(),该函数把任何变量值(除了资源变量)转化为字符串的形式,可以把字符串保存到文件里,或者注册为Session,乃至于使用curl来模拟GET/POST来传输变量,达到RPC的效果。如果要将串行化的变量转化成PHP原始的变量值,那么可以使用unserialize()函数。一、变量串行化我们举简单的例子来说明串行化,以及它的存储格式。整型:以下为引用的内容: $var=23;
阅读全文
posted @ 2013-02-15 11:29
saws
摘要:后期静态绑定从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
摘要: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
摘要: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
摘要:魔术方法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
摘要: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
摘要:构造函数和析构函数此处要注意一个知识点,就是子类和父类他们的__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
摘要:属性众所周知类的属性三个,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
摘要:基本概念基本概念需要注意的比较散,一些基本的东西吧。注意以下成员定义无效:总的来说就是i不接受任何表达式的赋值,只能直接是字符串和数组。1 <?php2 class SimpleClass3 public $var1='hello'.'word';4 public $var2=<<<EOT hello world5 EOD;6 public $var3=1+2;7 public $var4=self::mystaticmenthod();8 public $var5=$myvar;9 ?>还有在实力化过程中其实是拷贝。<?ph
阅读全文
posted @ 2013-02-01 16:36
saws
摘要:可变函数PHP支持可变函数的概念。这意味着如果一个变量后有圆括号,PHP将寻找与变量的值同名的函数,并且尝试执行他。可变函数不能用作一些语言结构,因为他们不是函数,如echo();print();unset();isset();empty();include();require(); 1 <?php 2 function a(){ 3 echo 'a'; 4 } 5 function b(){ 6 echo 'b'; 7 } 8 function c(){ 9 echo 'c';10 }11 $funrow=array('a'
阅读全文
posted @ 2013-01-31 15:47
saws
摘要:用户自定义函数一 当我们定义一个函数时,逻辑上函数的作用域是全局的,既可以是定义前,也可以是定义后。如1 <?php2 foo();3 function foo(){4 echo 'abc';5 }6 ?>他是可以正常执行的。为什么呢?简单说,PHP是先解释,再执行,他灵活的调用了foo()函数。对于function的位置,因为函数的作用域是全局的,所以只要定义了,那么就可以在任意位置去调用它。但是除了两种情况,函数必须在其调用之前定义,一是在条件语句中定义的函数,二是在函数中定义的函数。例如:1 <?php2 foo();3 if(true){4 funct
阅读全文
posted @ 2013-01-31 11:08
saws
摘要:return如果在一个函数中调用return语句,将立即结束此函数的执行并将它的参数作为函数的值返回。return()也会终止eval()语句或者脚步文件的执行。如果在全局范围中调用,则当前脚本文件中止运行。如果当前脚本文件是被include()或者require()的,则控制交回调用文件。此外,如果当前脚本是被include()的,则return()的值被当作include()调用的返回值。require和includerequire和include唯一的区别就是,处理失败的方式不同。include()会产生一个Warning警告,而后继续执行,而require()会产生一个致命错误,而后终
阅读全文
posted @ 2013-01-30 08:21
saws
摘要:foreach 值得注意的是两个例子一.是可变变量 可以很方便的遍历POST数组 1 <?php 2 $arr=array('banana','orange','appale','pear','grape'); 3 foreach($arr as $value): 4 $$value=$value; 5 //var_dump($$value); 6 endforeach; 7 $_POST=array('name'=>'Tom','password'=&g
阅读全文
posted @ 2013-01-28 18:49
saws
摘要:While确实最简单了 ,就一个流程控制替代语法,注意一下。 1 <?php 2 $i=1; 3 while($i<=){ 4 echo $i++; 5 } 6 $i=1; 7 while($i<=10): 8 print $i; 9 $i++;10 endwhile; //流程控制替代语法11 ?>do-while语句和while一样,区别在于do-while语句先执行,在坚持,所有会至少执行一次,资深的 C 语言用户可能熟悉另一种不同的 do-while 循环用法,把语句放在 do-while(0) 之中,在循环内部用 break语句来结束执行循环。以下代码片段示范
阅读全文
posted @ 2013-01-27 10:44
saws
摘要:简介中重点花括号可以讲一组语句封装成一个语句组。括号()对于运算结构可以强制改变优先级,而{}标识一个变量,如:<<<EOT asdas{$as}dcccc EOT;.流程控制的代替语法PHP提供了一些流程控制的替代语法,包括if,while,for,foreach,switch。替代的基本形式是把左花括号{蝗虫冒号:,把右括号花括号蝗虫 endif;endwhile;endfor;endforeach;以及endswitch;、注意两点这种写法主要出现在与HTML混编当中,提供代码清晰度。而且长结果的如 if elseif elseif else这种,要把所有左花括号代替留
阅读全文
posted @ 2013-01-26 11:03
saws
摘要:错误控制运算符PHP支持一个错误运算运算符:@。当将其放置在一个PHP表达式之前,该表达式可能产生的任何错误信息都被忽略掉。@运算符只对表达式有些。对新手来说一个简单的规则就是:如果能从某处得到值,就能在它前面加上@运算符。例如,可以把它放在变量,函数和include()调用,常量,等等之前。不能把它放在函数和类的定义之前,也不能用于条件结果例如IF 和FORECAH等。执行运算符PHP支持一个执行运算符:反引号(``)。注意不是单引号!PHP将尝试将反引号的内容作为外壳命令来执行,并将其输出信息返回 (例如,可以赋给一个变量而不是简单地丢弃到标准输出)。使用反引号运算符“·”的效果
阅读全文
posted @ 2013-01-25 09:08
saws
摘要:运算符优先级<?php$a=true?0:true?1:2; //(true?0:true)?1:2=2?> 说明三元运算符是左联。算术运算符$a%$b 在$a为负值的结果也是负值1 <?php2 $a=-7;3 $b=5;4 echo $a%$b5 ?>这里有个小重点:三元运算符,为什么叫三元运算符呢? 因为还有一元和二元运算符!屌丝一元运算符:(只有一个expr)参加运算,例如:$a++,$a--,!$a二元运算符:(两个expr参加运算),例如 $a+$b,$a-$b,$a%$b三元运算符:(众所周知了)例如:$a?$b:$c;赋值运算符赋值运算符“=”,相当于一
阅读全文
posted @ 2013-01-24 09:25
saws
摘要:常量的语法 可以用define()函数来定义常量。一个常量一旦被定义,就不能再改变或者取消定义。而且常量只能包含标量(boolen,integer,float和string)常量和(全局)变量在不同的名字空间中。这意味着例如TRUE和$TRUE是不同的。如果使用了一个未定义的常量,PHP假定想要的是该常量本身的名字,如同用字符串调用它一样(CONSTANT对应“CONSTANT”)。此时将发出一个E_NOTICE级的错误。变量和常量的5点不同1.常量前面没有美元符号($)2.常量只能用define()函数定义,而不能通过赋值语句;3.常量可以不用理会变量的作用域而在任何地方定义和访问;4.常量
阅读全文
posted @ 2013-01-21 14:05
saws
摘要:可变变量好吧,我第一次看见这个东西或者说第一次认真的看这个东西,我感觉蛋都碎了,如此容易混淆的东西,创造他的价值在哪,不过我想可能有他特殊应用的地方,那么我百度谷歌一下吧。看到这个简洁的代码,哥愚笨的脑袋都震精了。在实际使用中,我们可以不用单独列出并使用每一个表单变量,我们可以使用一个循环语句和一个变量来自动处理它们。结合“for循环”,举例如下:orderform.html的主要内容 1 <form action="test.php" method="post"> 2 <table border="0"> 3
阅读全文
posted @ 2013-01-18 16:23
saws

浙公网安备 33010602011771号