博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
php知识点
阅读量:5248 次
发布时间:2019-06-14

本文共 7912 字,大约阅读时间需要 26 分钟。

一、typeof

// 运算数为数字typeof(x) = "number"// 运算数为字符串typeof(x) = "string"// 运算数为布尔值typeof(x) = "boolean"// 运算数为对象,数组和nulltypeof(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

 

转载于:https://www.cnblogs.com/zhuiluoyu/p/4568592.html

你可能感兴趣的文章
linux后台运行和关闭SSH运行,查看后台任务
查看>>
桥接模式-Bridge(Java实现)
查看>>
303. Range Sum Query - Immutable
查看>>
C# Dynamic通用反序列化Json类型并遍历属性比较
查看>>
前台freemark获取后台的值
查看>>
Leetcode: Unique Binary Search Trees II
查看>>
C++ FFLIB 之FFDB: 使用 Mysql&Sqlite 实现CRUD
查看>>
Spring-hibernate整合
查看>>
c++ map
查看>>
exit和return的区别
查看>>
Django 相关
查看>>
比较安全的获取站点更目录
查看>>
空间分析开源库GEOS
查看>>
RQNOJ八月赛
查看>>
前端各种mate积累
查看>>
Python(软件目录结构规范)
查看>>
Windows多线程入门のCreateThread与_beginthreadex本质区别(转)
查看>>
Nginx配置文件(nginx.conf)配置详解1
查看>>
linux php编译安装
查看>>
name phone email正则表达式
查看>>