一,NULL

二,资源

三,回调

四,魔术常量

五,魔术方法

六,内置方法

七,匿名函数

八,超全局变量

九,杂项


一,NULL:
    表示一个变量没有值。该类型的唯一的值就是null;
    NULL出现的情况:
        1.被赋值为NULL;
        2.尚未被赋值;
        3.被unset();
    函数:
        is_null($var):检查$var是否为null;

二,资源:
    资源是一种特殊的变量,保存了到外部资源的一个引用。资源是通过专门的函数来建立和使用的;
    转化:
        由于资源类型变量保存有为打开文件,数据库连接,图形画布区域等特殊句柄,因此将其它类型转化为资源没有意义;
    释放:
        PHP4 Zend引擎引进了引用计数系统,可以自动检测到一个资源不再引用了,这种情况下该资源使用的所有外部资源都将会被垃圾回收系统释放。
        因此很少需要手工释放内存。对于持久数据库连接,将不会被垃圾回收系统销毁;
    函数:
        get_resource_type($handle):返回$handle所指定的资源类型;

三,回调:
    call_user_func($fun,$param0,$param1.....):$fun所要执行的回调函数,$param0,$param1....回调函数的参数;
        回调函数为类实例方法时,第一个参数为一数组,其中下标为0的元素为实例对象,下标为1的元素为所要回调的实例方法名,参数依旧;
        回调函数为类静态方法时第一个参数有两种方式:
            1.数组,其中下标为0的元素为类名,下标为1的元素为所要回调的静态方法;
            2.用“::”连接的类名和静态方法名组成的字符串;
    call_user_func_array():

四,魔术常量:
    __LINE__:文件中的当前行号;
    __FILE__:文件的完整路径和文件名。如果用在被包含的文件中,则返回被包含的文件名。PHP4.0.2起总包含一个绝对路径;
    __DIR__:文件所在目录。如果用在被包含文件中,返回被包含文件所在的目录。等价于dirname(__FILE__)。除非是根目录,否则目录名不包括末尾的斜杠;
    __FUNCITON__:返回该函数被定义的名字。自PHP5起区分大小,PHP4中总是小写;、
    __CLASS__:返回该类被定义的名字。自PHP5起区分大小写,PHP4中总是小写;
    __METHOD__:返回类中方法被定义的名字,区分大小写;
    __NAMESPACE__:返回编译时所定义的命名空间;

五,魔术方法:
    __sleep():serialize()函数会检查是否存在__sliip()。如果存在,__sleep()将先被调用,然后再执行序列化操作。
        功能可用于清理对象,并返回一个包含对象中所有应用被序列化的变量名称的数组。如果该方法不返回任何内容,则NULL被序列化,并产生一个E_NOTICE错误;
    __wakeup():unserialize()函数会检查是否存在__wakeup()。如果存在,将先到用,然后在执行反序列化操作;
    __toString():当对象应用于string类型的场合时将调用__toString()进行相应的转换设置;
    __invoke():当尝试以函数调用的方式使用一个对象时,__invoke()方法将自动调用;
    static object __set_state($ary):当盗用var_export()时,该静态方法将被调用。参数$ary是按array('property'=>value)的格式排列类的属性;
    __clone():当使用clone关键字复制对象时,将调用对象的__clone()方法,该方法不能被直接调用;

六,内置函数:
    PHP有很多标准的函数,有些需要与特定的扩展模块一起编译才能使用;
    get_loaded_extensions():获取所有以支持的扩展模块;
    extension_loaded($modeName):检查指定的扩展模块是否加载;
    dl($modeName):运行时加载指定的扩展模块,安全模式下不可用。由于稳定性问题,在一些ASPIs中禁用dl(),只有CLI和Embed APIs中才能使用,可以使用ExtensionLoadingDirectives代替该问题;
    get_extension_funcs($modeName):获取指定扩展模块中的内置函数。$modeName为指定的模块名,必须小写;

七,匿名函数:又叫闭包函数,是通过Closure类来实现的;
    通常用于回调函数,也可以作为变量的值来使用,PHP会自动把表达式转化为内置类Closure的对象实例;
    Closure对象也会从父作用域继承类属性,这些属性必须在函数或类的头部声明。从父作用于继承变量与使用全局变量不同,Closure的父作用于是声明该Closure的函数,不一定是其被调用的函数;

八,超全局变量:
    超全局变量实在全部作用域中始终可以使用的内置变量,在函数或方法中无需执行global $variable就可以被访问;
    超全局变量具体包括:
        $GLOABALS:引用全局作用域中可用的全部变量。是一个包含了全部变量的全局组合数组,变量的名字就是数组的键;
        $_SERVER:服务器和执行环境信息。是一个包含头信息、路径、及脚本位置等信息的数组。数组中的元素是由服务器提供的,不能保证每个服务器都提供全部元素;包含一下元素:
            PHP_SELF:但前执行脚本的文件名,与document root有关;
            argv:传递给该脚本的参数的数组;
            argc:包含命令行模式下传递给该脚本的参数的数组;
            GATEWAY_INTERFACE:服务器使用的CGI规范的版本;
            SERVER_ADDR:当前脚本所在的服务器的IP地址;
            SERVER_NAME:当前脚本所在服务器的主机名。如果脚本运行在虚拟机上,该名称又虚拟机所设置的值决定;
            SERVER_SOFTWARE:服务器标识字符串,在相应请求时的头信息中给出;
            SERVER_PROTOCOL:请求页面时通信协议的名称和版本;
            …………
        $__GET:HTTP GET变量。通过urldecode()传递的;
        $__POST:HTTP POST变量;
        $__FILE:HTTP文件上传变量。通过POST方式上传到当前脚本项目的数组;
        $__REQUEST:HTTP Request变量。默认情况下包含了$__GET,$__POST,$__COOKIE的数组;
            request_order指令会影响$__REQUEST的内容;
            命令行模式下,将不包含argv和argc信息,它们存在于$__SERVER数组中;
        $__SESSION:Session变量;
        $__ENV:环境变量。通过环境方式传递给当前脚本的变量的数组。这些变量被从PHP解析器的运行环境导入到PHP的全局命名空间。很多由支持PHP运行的shell提供,并且不同系统可能运行不同的shell,所以没有明确的变量列表;
        $__COOKIE:HTTP Cookies,通过HTTP Cookies方式传递个当前脚本的变量的数组;
        $php__errormsg:前一个错误信息。包含由php生成的最新错误信息,要求track_errors配置项是开启的(默认为关闭)。该变量只在错误发生的作用域内可用;
        $HTTP__RAW__POST__DATA:原生POST数据,包含POST提交的原始数据;
        $http__response__header:HTTP响应头。与get_header()类似。当使用HTTP包装器时,$http_response_header将被HTTP响应头信息填充;
        $argc:传递给脚本的参数数目。脚本的文件名总是作为参数传递给当前脚本。该变量仅在register_argc_argv开启时可用;
        $argv:传递给当前脚本的参数的数组。第一个元素总是当前脚本的文件名。该变量仅在register_argc_argv开启时可用;

    注:
        默认情况下,所有超全局变量都是可用的,但会受一些指令会影响;如:variables_order;
        如果已经弃用的register__globals指令被设置为On,那么局部变量也将在脚本的全局作用域中可用;
        函数或方法中,超全局变量不能被用作可变变量;

九,杂项

cookie:

  一种在远程浏览器端存储数据并能追踪或识别再次访问的用户的机制可以使用setcookie()设定cookeis。cookies是HTTP信息头中的一部分,因此SetCookie()必须在想浏览器发送任何输出前调用。

序列化:
        程序中使用session_register()来保存对象到会话中时,在每个页面结束的时候这些对象将自动序列化,而在每个页面开始的时候又自动序列化;

instanceof:
    判断某变量是否属于某个类的实例,或是否继承自某个父类的子类的实例,或实现某个接口的实例。通常与相应的类名一起使用,也可以与相应的对象或类名字符变量。
    如果所要检查的类名不存在,instanceof会调用__autoload()。如果该类没有被装载,则会产生一个致命的错误,可以通过使用动态类引用或一个包含类名的字符窜变量来避免这种情况;

posted on 2012-09-08 10:38  柳風  阅读(204)  评论(0)    收藏  举报