zoukankan      html  css  js  c++  java
  • php知识点

    一、typeof

    // 运算数为数字
    typeof(x) = "number"
    // 运算数为字符串
    typeof(x) = "string"
    // 运算数为布尔值
    typeof(x) = "boolean"
    // 运算数为对象,数组和null
    typeof(x) = "object"
    // 运算数为函数
    typeof(x) = "function"
    

    二、PHP 的“魔术常量”

      PHP 向它运行的任何脚本提供了大量的预定义常量。不过很多常量都是由不同的扩展库定义的,只有在加载了这些扩展库时才会出现,或者动态加载后,或者在编译时已经包括进去了。

      有七个魔术常量它们的值随着它们在代码中的位置改变而改变。

    _LINE__ 	文件中的当前行号。
    __FILE__ 	文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名。自 PHP 4.0.2 起,__FILE__ 总是包含一个绝对路径(如果是符号连接,则是解析后的绝对路径),而在此之前的版本有时会包含一个相对路径。
    __DIR__ 	文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录。它等价于 dirname(__FILE__)。除非是根目录,否则目录中名不包括末尾的斜杠。(PHP 5.3.0中新增) =
    __FUNCTION__ 	函数名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该函数被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。
    __CLASS__ 	类的名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该类被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。
    __METHOD__ 	类的方法名(PHP 5.0.0 新加)。返回该方法被定义时的名字(区分大小写)。
    __NAMESPACE__ 	当前命名空间的名称(大小写敏感)。这个常量是在编译时定义的(PHP 5.3.0 新增)
    
    例子
    
    class trick
    {
          function doit()
          {
                    echo __FUNCTION__;
          }
          function doitagain()
          {
                    echo __METHOD__;
          }
    }
    $obj=new trick();
    $obj->doit();
    output will be ----  doit
    $obj->doitagain();
    output will be ----- trick::doitagain
    

    三、PHP的魔术方法:

    PHP把类中所有以__(两个下划线)开头的方法当成魔术方法,一般建议用户不要将自定义的方法前面加上__作为前缀。魔术方法:
    
    1. __construct()
    
    类的默认构造方法,如果__construct()和与类同名的方法共同出现时,默认调用__construct()而不是同类名方法。一般情况下用户自定义构造方法也会使用__construct()。
    
    2. __destruct()
    
    类的析构函数,当该对象的所有引用都被删除,或者对象被显式销毁时执行。
    
    3. __get($name)
    
    可以简单归纳为:用$object->a的方式读取对象的属性时,如果属性a存在且是public型,那么直接返回该属性的值;如果属性a不存在或者是protected/private这样的不可直接访问的类型,就会调用__get($name)方法并以返回值为准。一般可以使用该方法使外部可限制性地访问内部属性,或者完成类似java中的反射操作。
    
    4. __set($name, $value)
    
    与__get($name)类似,用$object->a = 17的方式给属性赋值时,如果属性a存在且是public型,那么直接给属性a赋值皆可;如果属性a不存在或者是protected/private型,就会调用__set($name, $value)方法。
    
    5. __call($name, $arguments) / __callStatic($name, $arguments)
    
    当调用不存在或者不可访问的方法时,会调用__call($name, $arguments)方法。而当在静态方法中调用不存在或者不可访问的方法时,会调用__callStatic($name, $arguments)方法。
    
    对象调用某个方法,若方法存在,则直接调用;若不存在,则会去调用__call函数。
    
    6. __toString()
    
    当打印对象时会被直接调用。如echo $object;
    
    7. __clone()
    
    当对象被拷贝时直接调用。如$a = new Action(); $a = $object; 如:$t=new Test();$t1=clone $t;
    
    8. __isset($name) / __unset($name)
    
    对不存在或者不可访问的属性使用isset()或者empty()时,__isset()会被调用;当unset一个不存在或者不可访问的属性时,__unset()会被调用,否则直接unset该属性皆可。
    
    9. __set_state()
    
    用var_export()输出一个对象时,__set_state()会被调用,输出内容以该魔术方法的返回值为准。注:var_export()和var_dump()类似,只是var_export()输出的内容符合php语法。注意使用方法:
    
    $test = new Test();
    $b = var_export($test, true);
    var_dump($b);
    
    class Test {
    
        public $a;
        public static function __set_state($array) {
            $ab = new Test();
            $ab->a = 10;
            return $ab;
        }
    }
    
    10. __autoload($name)
    
    实例化一个对象时,如果对应的类不存在,则该方法被调用。注意:该方法是全局函数,参数是类的名称。
    
    11. __sleep() / __wakup()
    
     __sleep():serialize之前被调用。若对象比较大,想删减一点东东再序列化,可考虑一下此函数。
    __wakup():unserialize时被调用,做些对象的初始化工作。

    四、PHP环境变量

    PHP环境变量主要有
    $GLOBALS[]、$_SERVER[]、$_GET[]、$_POST[]、$_COOKIE[]、$_FILES[]、$_ENV[]、$_REQUEST[]、$_SESSION[]。
    $_GET和$_POST主要针对FORM表单提交的数据,
    $_COOKIE和$_SESSION主要针对客户端游览器和服务器端会话数据。
    $_FILES主要针对文件上传时提交的数据,
    $_REQUEST主要针对提交表单中所有请求数组,包括$_GET、$_POST、$_COOKIE中的所有内容
    
    PHP环境变量$_SERVER
    
      是一个包含服务器端相关信息的PHP全局环境变量,在PHP4.1.0之前的版本使用$HTTP_SERVER_VARS。更多信息可以参考这里。
    
      $_SERVER['PHP_SELF'] 当前正在执行脚本的文件名,与 document root相关。在FORM表单中,如执行文件是本身,你可以在ACTION中使用$_SERVER['PHP_SELF'],好处是当执行文件名有变动时可以不去频繁替换ACTION中的文件名。
    
      $_SERVER['SERVER_NAME'] 当前运行的PHP程序所在服务器主机的名称。
    
      $_SERVER['REQUEST_METHOD'] 访问页面时的请求方法,即GET、HEAD、POST、PUT。
    
      $_SERVER['DOCUMENT_ROOT'] 当前运行的PHP程序所在的文档根目录。也就是PHP.INI文件中的定义。
    
      $_SERVER['HTTP_REFERER'] 链接到当前页面的前一页面的URL地址。在页面跳转功能中非常有用。
    
      $_SERVER['REMOTE_ADDR'] 正在浏览当前页面访问者的IP地址。
    
      $_SERVER['REMOTE_HOST'] 正在浏览当前页面用户的主机名。
    
      $_SERVER['REMOTE_PORT'] 正在游览的用户连接到服务器时所使用的端口。
    
      $_SERVER['SCRIPT_FILENAME'] 当前执行脚本的绝对路径名。
    
      $_SERVER['SERVER_PORT'] 服务器所使用的端口
    
      $_SERVER['SCRIPT_NAME'] 包含当前脚本的路径。这在页面需要指向自己时非常有用。
    
      $_SERVER['REQUEST_URI'] 访问此页面所需的URI。如“/index.html”。
    
      $_SERVER['PHP_AUTH_USER'] 应用在HTTP用户登录认证功能中,这个变量是用户输入的用户名。
    
      $_SERVER['PHP_AUTH_PW'] 应用在HTTP用户登录认证功能中,这个变量便是用户输入的密码。
    
      $_SERVER['AUTH_TYPE'] 应用在HTTP用户登录认证功能中,这个变量便是认证的类型。
    
      注:上述提到的这些PHP全局环境变量,在php.ini中的register_globals设置为on时,这些变量在所有PHP程序脚本中都可用,也就是$_SERVER数组被分离了。当然为了安全考虑,还是不要将register_globals打开为好。
    
    PHP系统常量
    
      __FILE__ 当前PHP程序脚本的绝对路径及文件名称
    
      __LINE__ 存储该常量所在的行号
    
      __FUNCTION__ 存储该常量所在的函数名称
    
      __CLASS__ 存储该常量所在的类的名称
    
      PHP_VERSION 存储当前PHP的版本号,也可以通过PHPVERSION()函数获取。
    
      PHP_OS 存储当前服务器的操作系统
    

     五、环境变量

    $ip = getenv('REMOTE_ADDR');
    
    // 或简单仅使用全局变量($_SERVER 或 $_ENV)
    $ip = $_SERVER['REMOTE_ADDR'];
    

        PHP中的$_ENV是一个包含服务器端环境变量的数组。它是PHP中一个超级全局变量,我们可以在PHP 程序的任何地方直接访问它。$_ENV只是被动的接受服务器端的环境变量并把它们转换为数组元素。

     由于$_ENV变量是取决于服务器的环境变量的,从不同的服务器上获取的$_ENV变量打印出的结果可能是完全不同的。所以无法像$_SERVER 那样列出完整的列表。

    有时候,$_ENV会为空,其原因通常是php的配置文件php.ini的配置项为:variables_order = "GPCS"。要想让$_ENV的值不为空,那么variables_order的值应该加上一个大写字母“E”,即:variables_order = "EGPCS"。

    上述配置表示了PHP接受的外部变量来源及顺序,EGPCS是Environment、Get、Post、Cookies、Server的缩写。如果variables_order 的配置中缺少E ,则PHP 无法接受环境变量,那么$_ENV 也就为空了。

    由于开启$_ENV,即variables_order = "EGPCS"会导致一些性能损失,按php官方的说法是,在生产环境中,不推荐使用。

    他们更推荐使用getenv (string $varname)函数来获取Environment中的值,而这点需要在编程时就注意到。如果编程时用了$_ENV而variables_order中又没有配置为variables_order = "EGPCS",则程序运行时可能会报错。

        $_SERVER与$_ENV变量列表

    _SERVER["SCRIPT_NAME"]          /php/index.php
    _SERVER["HTTP_COOKIE"]          cdb_sid=tcSZ7o
    _SERVER["AUTH_PASSWORD"]        no value
    _SERVER["AUTH_TYPE"]            no value
    _SERVER["AUTH_USER"]            no value
    _SERVER["CONTENT_LENGTH"]       0
    _SERVER["CONTENT_TYPE"]         no value
    _SERVER["PATH_TRANSLATED"]      c:inetpubwwwroot
    _SERVER["QUERY_STRING"]        (url中问号后边的部分)
    _SERVER["REMOTE_ADDR"]          127.0.0.1
    _SERVER["REMOTE_HOST"]          127.0.0.1
    _SERVER["REMOTE_USER"]          no value
    _SERVER["REQUEST_METHOD"]       GET
    _SERVER["SERVER_NAME"]          localhost
    _SERVER["SERVER_PORT"]          80
    _SERVER["SERVER_PROTOCOL"]      HTTP/1.1
    _SERVER["SERVER_SOFTWARE"]      Microsoft-IIS/6.0
    _SERVER["APPL_MD_PATH"]         /LM/W3SVC/1/Root/php
    _SERVER["APPL_PHYSICAL_PATH"]   E:webphp
    _SERVER["INSTANCE_ID"]          1
    _SERVER["INSTANCE_META_PATH"]   /LM/W3SVC/1
    _SERVER["LOGON_USER"]           no value
    _SERVER["REQUEST_URI"]          /php/index.php
    _SERVER["URL"]                  /php/index.php
    _SERVER["SCRIPT_FILENAME"]      E:webphpindex.php
    _SERVER["ORIG_PATH_INFO"]       /php/index.php
    _SERVER["PATH_INFO"]            no value
    _SERVER["ORIG_PATH_TRANSLATED"]    E:webphpindex.php
    _SERVER["DOCUMENT_ROOT"]        c:inetpubwwwroot
    _SERVER["PHP_SELF"]             /php/index.php
    _SERVER["HTTP_CONNECTION"]      keep-alive
    _SERVER["HTTP_KEEP_ALIVE"]      300
    
    _SERVER["HTTP_HOST"]            localhost
    _SERVER["HTTP_USER_AGENT"]      Mozilla/5.0 (Windows; U; Windows NT 5.2; zh-CN; rv:1.8.0.2) Gecko/20060308 Firefox/1.5.0.2
    _SERVER["REQUEST_TIME"]         1146214357
    _SERVER["argv"] 
    
    Array
    (
    )
    
    _SERVER["argc"]                          0
    _ENV["ALLUSERSPROFILE"]                  C:Documents and SettingsAll Users
    _ENV["ClusterLog"]                       C:WINDOWSClustercluster.log
    _ENV["CommonProgramFiles"]               C:Program FilesCommon Files
    _ENV["COMPUTERNAME"]                     LIUBO
    _ENV["ComSpec"]                          C:WINDOWSsystem32cmd.exe
    _ENV["FP_NO_HOST_CHECK"]                 NO
    _ENV["NUMBER_OF_PROCESSORS"]             1
    _ENV["OS"]                               Windows_NT
    _ENV["Path"]                             C:WINDOWSsystem32;C:WINDOWS;C:WINDOWSSystem32Wbem;E:Program FilesMySQLMySQL Server 5.0in;c:php;c:phpext
    _ENV["PATHEXT"]                          .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH
    _ENV["PROCESSOR_ARCHITECTURE"]           x86
    _ENV["PROCESSOR_IDENTIFIER"]             x86 Family 15 Model 4 Stepping 1, GenuineIntel
    _ENV["PROCESSOR_LEVEL"]                  15
    _ENV["PROCESSOR_REVISION"]               0401
    _ENV["ProgramFiles"]                     C:Program Files
    _ENV["SystemDrive"]                      C:
    _ENV["SystemRoot"]                       C:WINDOWS
    _ENV["TEMP"]                             d:
    _ENV["TMP"]                              d:
    _ENV["USERPROFILE"]                      C:Documents and SettingsDefault User
    _ENV["windir"]                           C:WINDOWS
    
  • 相关阅读:
    try-catch- finally块中, finally块唯一不执行的情况是什么?
    Mac下 pygame.image.load不显示图片解决方法
    Ubuntu中sudo速度慢的解决方法(转载)
    [Mac Terminal] ___中断跳出死循环
    Fuzzy logic
    Discrete Mathematics and Its Applications | 1 CHAPTER The Foundations: Logic and Proofs | 1.4 Predicates and Quantifiers
    Bugs -----The largest and most interesting kind of thing.
    A Brief, Incomplete, and Mostly Wrong History of Programming Languages
    MIPS指令集
    >> 计算机的数据表示
  • 原文地址:https://www.cnblogs.com/zhuiluoyu/p/4568592.html
Copyright © 2011-2022 走看看