参见:http://www.phpnotes.top/2017/11/27/uncategorized/59/
可变变量:一个变量的变量名可以动态的设置和使用,例如$a='csc';$$a = 'test';echo $csc;超全局变量不能用作可变变量。$this 变量也是一个特殊变量,不能被动态引用
和 superglobals 一样,常量的范围是全局的。不用管作用区域就可以在脚本的任何地方访问常量
goto 操作符仅在 PHP 5.3及以上版本有效。
以下代码结构会进入全局命名空间:
-
functions(函数)
-
classes(类)
-
interfaces(接口)
-
constants(常量,并非类常量)
-
在函数/方法之外定义的变量
要避免递归函数/方法调用超过 100-200 层,因为可能会使堆栈崩溃从而使当前脚本终止。 无限递归可视为编程错误
类型声明:
类型声明允许函数在调用时要求参数为特定类型。 如果给出的值类型不对,那么将会产生一个错误: 在PHP 5中,这将是一个可恢复的致命错误,而在PHP 7中将会抛出一个TypeError异常。
为了指定一个类型声明,类型应该加到参数名前。这个声明可以通过将参数的默认值设为NULL
来实现允许传递NULL
。
调用类中的可变函数时,调用静态方法时,函数调用要比静态属性优先:
<?php
class Foo
{
static $variable = 'static property';
static function Variable()
{
echo 'Method Variable called';
}
}
echo Foo::$variable; // This prints 'static property'. It does need a $variable in this scope.
$variable = "Variable";
Foo::$variable(); // This calls $foo->Variable() reading $variable in this scope.
而且还TM有这种用法
<?php
class Foo
{
static function bar()
{
echo "bar\n";
}
function baz()
{
echo "baz\n";
}
}
$func = array("Foo", "bar");
$func(); // prints "bar"
$func = array(new Foo, "baz");
$func(); // prints "baz"
$func = "Foo::bar";
$func(); // prints "bar" as of PHP 7.0.0; prior, it raised a fatal error
使用dl()函数代替在php.ini中引入扩展
<?php
// 加载一个扩展的例子,基于操作系统
if (!extension_loaded('sqlite')) {
if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
dl('php_sqlite.dll');
} else {
dl('sqlite.so');
}
}
7.0.0 | PHP-FPM 模式下已禁用 dl()。 |
5.3.9 | 尽管不推荐,但 PHP-FPM 模式下启用了 dl()。 |
5.3.0 | 由于稳定性,dl() 在某些 SAPI 中被禁用。仅仅允许 dl() 的 SAPI 为 CLI 和 Embed。 使用 扩展加载指令 作为替代。 |