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:\inetpub\wwwroot
_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:\web\php\
_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:\web\php\index.php
_SERVER["ORIG_PATH_INFO"]       /php/index.php
_SERVER["PATH_INFO"]            no value
_SERVER["ORIG_PATH_TRANSLATED"]    E:\web\php\index.php
_SERVER["DOCUMENT_ROOT"]        c:\inetpub\wwwroot
_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 Settings\All Users
_ENV["ClusterLog"]                       C:\WINDOWS\Cluster\cluster.log
_ENV["CommonProgramFiles"]               C:\Program Files\Common Files
_ENV["COMPUTERNAME"]                     LIUBO
_ENV["ComSpec"]                          C:\WINDOWS\system32\cmd.exe
_ENV["FP_NO_HOST_CHECK"]                 NO
_ENV["NUMBER_OF_PROCESSORS"]             1
_ENV["OS"]                               Windows_NT
_ENV["Path"]                             C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;E:\Program Files\MySQL\MySQL Server 5.0\bin;c:\php;c:\php\ext
_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 Settings\Default User
_ENV["windir"]                           C:\WINDOWS

 

posted @ 2015-06-11 11:36  坠落鱼  阅读(319)  评论(0编辑  收藏  举报