- PHP 中的所有函数和类都具有全局作用域,而且函数和类可以在其声明之前调用,即函数和类声明会被提到作用域顶部(hoisted)。(注意:如果函数是定义在其他文件中,则必须先require进来而且require必须在调用之前。)而且嵌套的函数可以访问外围函数。下面这段代码是可以正确运行的:
1 |
|
再看下面的例子:
1 |
|
- 静态变量可以分为:
1.静态全局变量,PHP中的全局变量也可以理解为静态全局变量,因为除非明确unset释放,在程序运行过程中始终存在。
2.静态局部变量,也就是在函数内定义的静态变量,函数在执行时对变量的操作会保持到下一次函数被调用。
3.静态成员变量,这是在类中定义的静态变量,和实例变量相对应,静态成员变量可以在所有实例中共享。
最常见的是静态局部变量及静态成员变量。局部变量只有在函数执行时才会存在。 通常,当一个函数执行完毕,它的局部变量的值就已经不存在,而且变量所占据的内存也被释放。 当下一次执行该过程时,它的所有局部变量将重新初始化。如果某个局部变量定义为静态的, 则它的值不会在函数调用结束后释放,而是继续保留变量的值。
来看下面的例子:
1 |
|
- exit()/die()用于中止脚本的执行。
即脚本执行到exit()或die()那一行为止,如果在被包含文件中使用exit()或die(),则同时会中断包含文件的脚本执行。(但在exit()或die()之后声明的函数或类则可以被调用,因为它们会被hoisted到作用域顶部,见上面)
1 | test.php: |
声明类属性或方法为静态,就可以不实例化类而直接访问。静态属性不能通过一个类已实例化的对象来访问(但静态方法可以)。
urlencode()和rawurlencode()
返回字符串,此字符串中除了-_.
之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数,urlencode()将空格则编码为加号(+),而rawurlencode()将空格编码为%20
。
在编码时应该只对部分URL编码,否则URL中的冒号和反斜杠也会被转义。
- htmlentities 与 htmlspecialchars 的差別
两者都会转换以下符号:
&
(ampersand) : &
"
(double quote) : "
'
(single quote) : ''
或者 '
<
(less than) : <
>
(greater than) : >
- htmlspecialchars 只转换以上的 HTML 符号
- htmlentities 除了转换以上的 HTML 符号, 也转换中文
- 两者都不会转换英文、数字、括号及分号
htmlspecialchars 速度比 htmlentities 快
静态成员变量通过继承在子类和父类中共享,子类可以改变父类中静态变量的值。
1 |
|
- PHP_INI_* 模式的定义
PHP_INI_USER 可在用户脚本(例如 ini_set())或 Windows 注册表(自 PHP 5.3 起)以及 .user.ini 中设定
PHP_INI_PERDIR 可在 php.ini,.htaccess 或 httpd.conf 中设定
PHP_INI_SYSTEM 可在 php.ini 或 httpd.conf 中设定
PHP_INI_ALL 可在任何地方设定