PHP7 已经出来1年了,PHP7.1也即将和你们见面,这么多好的特性,好的方法,为何不使用呢,也但愿PHP愈来愈好。 php
在这里整理 PHP 5.1 ,PHP5.2,PHP5.3,PHP5.4,PHP5.5,PHP5.6 ,PHP7,PHP7.1 全部新特性,已备你们学习及使用
PHP5.1~PHP5.6 http://blog.csdn.net/fenglailea/article/details/9853645
PHP7~PHP7.1
http://blog.csdn.net/fenglailea/article/details/52717364
风.foxcss
把当前目录做为Root Document只须要这条命令便可:html
php -S localhost:3300
也能够指定其它路径java
php -S localhost:3300 -t /path/to/root
还能够指定路由mysql
php -S localhost:3300 router.php
命名空间的分隔符为反斜杆\web
namespace fox\lanmps\Table; class Select {}
PHP5.3 中引入命名空间的别名类和命名空间短版本的功能。虽然这并不适用于字符串类名称正则表达式
use Some\Deeply\Nested\Namespace\FooBar; // does not work, because this will try to use the global `FooBar` class $reflection = new ReflectionClass('FooBar'); echo FooBar::class;
为了解决这个问题采用新的FooBar::class语法,它返回类的完整类别名称算法
namespace Name\Space { const FOO = 42; function f() { echo __FUNCTION__."\n"; } } namespace { use const Name\Space\FOO; use function Name\Space\f; echo FOO."\n"; f(); }
输出
42
Name\Space\fsql
从同一 namespace 导入的类、函数和常量如今能够经过单个 use 语句 一次性导入了。数据库
//PHP7以前 use some\namespace\ClassA; use some\namespace\ClassB; use some\namespace\ClassC as C; use function some\namespace\fn_a; use function some\namespace\fn_b; use function some\namespace\fn_c; use const some\namespace\ConstA; use const some\namespace\ConstB; use const some\namespace\ConstC; // PHP7以后 use some\namespace\{ClassA, ClassB, ClassC as C}; use function some\namespace\{fn_a, fn_b, fn_c}; use const some\namespace\{ConstA, ConstB, ConstC};
static关键字来引用当前类,即实现了延迟静态绑定
class A { public static function who() { echo __CLASS__; } public static function test() { static::who(); // 这里实现了延迟的静态绑定 } } class B extends A { public static function who() { echo __CLASS__; } } B::test();
输出结果:
B
多数计算机程序设计语言中都支持无条件转向语句goto,当程序执行到goto语句时,即转向由goto语句中的标号指出的程序位置继续执行。尽管goto语句有可能会致使程序流程不清晰,可读性减弱,但在某些状况下具备其独特的方便之处,例如中断深度嵌套的循环和 if 语句。
goto a; echo 'Foo'; a: echo 'Bar'; for($i=0,$j=50; $i<100; $i++) { while($j--) { if($j==17) goto end; } } echo "i = $i"; end: echo 'j hit 17';
闭包(Closure)函数和Lambda函数的概念来自于函数编程领域。例如JavaScript 是支持闭包和 lambda 函数的最多见语言之一。
在PHP中,咱们也能够经过create_function()在代码运行时建立函数。但有一个问题:建立的函数仅在运行时才被编译,而不与其它代码同时被编译成执行码,所以咱们没法使用相似APC这样的执行码缓存来提升代码执行效率。
在PHP5.3中,咱们可使用Lambda/匿名函数来定义一些临时使用(即用即弃型)的函数,以做为array_map()/array_walk()等函数的回调函数。
echo preg_replace_callback('~-([a-z])~', function ($match) { return strtoupper($match[1]); }, 'hello-world'); // 输出 helloWorld $greet = function($name) { printf("Hello %s\r\n", $name); }; $greet('World'); $greet('PHP'); //...在某个类中 $callback = function ($quantity, $product) use ($tax, &$total) { $pricePerItem = constant(__CLASS__ . "::PRICE_" . strtoupper($product)); $total += ($pricePerItem * $quantity) * ($tax + 1.0); };
PHP中本来有一个魔术方法__call(),当代码调用对象的某个不存在的方法时该魔术方法会被自动调用。新增的__callStatic()方法则只用于静态类方法。当尝试调用类中不存在的静态方法时,__callStatic()魔术方法将被自动调用。
class MethodTest { public function __call($name, $arguments) { // 参数 $name 大小写敏感 echo "调用对象方法 '$name' " . implode(' -- ', $arguments). "\n"; } /** PHP 5.3.0 以上版本中本类方法有效 */ public static function __callStatic($name, $arguments) { // 参数 $name 大小写敏感 echo "调用静态方法 '$name' " . implode(' -- ', $arguments). "\n"; } } $obj = new MethodTest; $obj->runTest('经过对象调用'); MethodTest::runTest('静态调用'); // As of PHP 5.3.0
以上代码执行后输出以下:
调用对象方法’runTest’ –- 经过对象调用调用静态方法’runTest’ –- 静态调用
以函数形式来调用对象时,__invoke()方法将被自动调用。
class MethodTest { public function __call($name, $arguments) { // 参数 $name 大小写敏感 echo "Calling object method '$name' " . implode(', ', $arguments). "\n"; } /** PHP 5.3.0 以上版本中本类方法有效 */ public static function __callStatic($name, $arguments) { // 参数 $name 大小写敏感 echo "Calling static method '$name' " . implode(', ', $arguments). "\n"; } } $obj = new MethodTest; $obj->runTest('in object context'); MethodTest::runTest('in static context'); // As of PHP 5.3.0
用法和Heredoc相似,但使用单引号。Heredoc则须要经过使用双引号来声明。
Nowdoc中不会作任何变量解析,很是适合于传递一段PHP代码。
// Nowdoc 单引号 PHP 5.3以后支持 $name = 'MyName'; echo <<<'EOT' My name is "$name". EOT; //上面代码输出 My name is "$name". ((其中变量不被解析) // Heredoc不加引号 echo <<<FOOBAR Hello World! FOOBAR; //或者 双引号 PHP 5.3以后支持 echo <<<"FOOBAR" Hello World! FOOBAR;
支持经过Heredoc来初始化静态变量、类成员和类常量。
// 静态变量 function foo() { static $bar = <<<LABEL Nothing in here... LABEL; } // 类成员、常量 class foo { const BAR = <<<FOOBAR Constant example FOOBAR; public $baz = <<<FOOBAR Property example FOOBAR; }
//PHP中定义常量一般是用这种方式 define("CONSTANT", "Hello world."); //而且新增了一种常量定义方式 const CONSTANT = 'Hello World';
本来格式为是(expr1) ? (expr2) : (expr3)
若是expr1结果为True,则返回expr2的结果。
新增一种书写方式,能够省略中间部分,书写为expr1 ?: expr3
若是expr1结果为True,则返回expr1的结果
$expr1=1; $expr2=2; //原格式 $expr=$expr1?$expr1:$expr2 //新格式 $expr=$expr1?:$expr2
输出结果:
1
1
简化判断
$param = $_GET['param'] ?? 1;
至关于:
$param = isset($_GET['param']) ? $_GET['param'] : 1;
echo json_encode("中文", JSON_UNESCAPED_UNICODE); //输出:"中文"
$bin = 0b1101; echo $bin; //13
这接受一个以16进制形式的 Unicode codepoint,并打印出一个双引号或heredoc包围的 UTF-8 编码格式的字符串。 能够接受任何有效的 codepoint,而且开头的 0 是能够省略的。
echo "\u{9876}"
旧版输出:\u{9876}
新版输入:顶
加入右链接运算符 * 来进行幂运算。 同时还支持简写的 *= 运算符,表示进行幂运算并赋值。
printf("2 ** 3 == %d\n", 2 ** 3); printf("2 ** 3 ** 2 == %d\n", 2 ** 3 ** 2); $a = 2; $a **= 3; printf("a == %d\n", $a);
输出
2 ** 3 == 8
2 * 3 * 2 == 512
a == 8
太空船操做符用于比较两个表达式。当 b 时它分别返回 -1 、 0 或 1 。 比较的原则是沿用 PHP 的常规比较规则进行的。
// Integers echo 1 <=> 1; // 0 echo 1 <=> 2; // -1 echo 2 <=> 1; // 1 // Floats echo 1.5 <=> 1.5; // 0 echo 1.5 <=> 2.5; // -1 echo 2.5 <=> 1.5; // 1 // Strings echo "a" <=> "a"; // 0 echo "a" <=> "b"; // -1 echo "b" <=> "a"; // 1
Traits提供了一种灵活的代码重用机制,即不像interface同样只能定义方法但不能实现,又不能像class同样只能单继承。至于在实践中怎样使用,还须要深刻思考。
魔术常量为TRAIT
官网的一个例子: trait SayWorld { public function sayHello() { parent::sayHello(); echo "World!\n"; echo 'ID:' . $this->id . "\n"; } } class Base { public function sayHello() { echo 'Hello '; } } class MyHelloWorld extends Base { private $id; public function __construct() { $this->id = 123456; } use SayWorld; } $o = new MyHelloWorld(); $o->sayHello(); /*will output: Hello World! ID:123456 */
$arr = [1,'james', 'james@fwso.cn']; $array = [ "foo" => "bar", "bar" => "foo" ];
function myfunc() { return array(1,'james', 'james@fwso.cn'); } echo myfunc()[1]; $name = explode(",", "Laruence,male")[0]; explode(",", "Laruence,male")[3] = "phper";
echo array(1, 2, 3)[0]; echo [1, 2, 3][0]; echo "foobar"[2];
如今全部接偏移量的内置的基于字符串的函数都支持接受负数做为偏移量,包括数组解引用操做符([]).
var_dump("abcdef"[-2]); var_dump(strpos("aabbcc", "b", -3)); 以上例程会输出: string (1) "e" int(3)
“常量引用”意味着数组能够直接操做字符串和数组字面值。举两个例子:
function randomHexString($length) { $str = ''; for ($i = 0; $i < $length; ++$i) { $str .= "0123456789abcdef"[mt_rand(0, 15)]; // direct dereference of string } } function randomBool() { return [false, true][mt_rand(0, 1)]; // direct dereference of array }
容许常量计算,容许使用包含数字、字符串字面值和常量的标量表达式
const A = 2; const B = A + 1; class C { const STR = "hello"; const STR2 = self::STR + ", world"; }
容许常量做为函数参数默认
function test($arg = C::STR2)
类常量可见性
如今起支持设置类常量的可见性。
两种模式 : 强制 ( 默认 ) 和 严格模式
类型:array,object(对象),string、int、float和 bool
若是你有一个函数接受多个可选的参数,目前没有办法只改变最后一个参数,而让其余全部参数为默认值。
RFC上的例子,若是你有一个函数以下:
function create_query($where, $order_by, $join_type='', $execute = false, $report_errors = true) { ... }
那么有没有办法设置$report_errors=false,而其余两个为默认值。为了解决这个跳跃参数的问题而提出:
create_query("deleted=0", "name", default, default, false);
代替 func_get_args()
类型如今容许为空,当启用这个特性时,传入的参数或者函数返回的结果要么是给定的类型,要么是 null 。能够经过在类型前面加上一个问号来使之成为可为空的。
以上例程会输出:
在PHP 7 中引入的其余返回值类型的基础上,一个新的返回值类型void被引入。 返回值声明为 void 类型的方法要么干脆省去 return 语句,要么使用一个空的 return 语句。 对于 void 函数来讲,null 不是一个合法的返回值。
以上例程会输出:
试图去获取一个 void 方法的返回值会获得 null ,而且不会产生任何警告。这么作的缘由是不想影响更高层次的方法。
函数和匿名函数均可以指定返回值的类型
在调用函数的时候,经过 … 操做符能够把数组或者可遍历对象解包到参数列表,这和Ruby等语言中的扩张(splat)操做符相似
则
若是你从不喜欢写这些getXYZ()和setXYZ($value)方法,那么这应该是你最受欢迎的改变。提议添加一个新的语法来定义一个属性的设置/读取:
目前,自定义迭代器不多使用,由于它们的实现,须要大量的样板代码。生成器解决这个问题,并提供了一种简单的样板代码来建立迭代器。
例如,你能够定义一个范围函数做为迭代器:
上述xrange函数具备与内建函数相同的行为,但有一点区别:不是返回一个数组的全部值,而是返回一个迭代器动态生成的值。
列表解析提供一个简单的方法对数组进行小规模操做:
$firstNames = [foreach ($users as $user) yield $user->firstName];
上述列表解析相等于下面的代码:
也能够这样过滤数组:
$underageUsers = [foreach ($users as $user) if ($user->age < 18) yield $user];
生成器表达式也很相似,可是返回一个迭代器(用于动态生成值)而不是一个数组。
在PHP5.5引入生成器的概念。生成器函数每执行一次就获得一个yield标识的值。在PHP7中,当生成器迭代完成后,能够获取该生成器函数的返回值。经过Generator::getReturn()获得。
输出为:1 2 3 a
在生成器中能够引入另外一个或几个生成器,只须要写yield from functionName1
输出:1 2 3 4 5 6
这个和java中的finally同样,经典的try … catch … finally 三段式异常处理。
一个catch语句块如今能够经过管道字符(|)来实现多个异常的捕获。 这对于须要同时处理来自不一样类的不一样异常时颇有用。
对于“数组的数组”进行迭代,以前须要使用两个foreach,如今只须要使用foreach + list了,可是这个数组的数组中的每一个数组的个数须要同样。看文档的例子一看就明白了。
短数组语法([])如今能够用于将数组的值赋给一些变量(包括在foreach中)。 这种方式使从数组中提取值变得更为容易。
如今list()支持在它内部去指定键名。这意味着它能够将任意类型的数组 都赋值给一些变量(与短数组语法相似)
如今引入了一个新的被称为iterable的伪类 (与callable相似)。 这能够被用在参数或者返回值类型中,它表明接受数组或者实现了Traversable接口的对象。 至于子类,当用做参数时,子类能够收紧父类的iterable类型到array 或一个实现了Traversable的对象。对于返回值,子类能够拓宽父类的 array或对象返回值类型到iterable。
经过给openssl_encrypt()和openssl_decrypt() 添加额外参数,如今支持了AEAD (模式 GCM and CCM)。
经过 Closure::fromCallable() 将callables转为闭包
Closure新增了一个静态方法,用于将callable快速地 转为一个Closure 对象。
以上例程会输出:
string(10) "some value"
如今支持经过 new class 来实例化一个匿名类,这能够用来替代一些“用后即焚”的完整类定义。
Closure::call() 如今有着更好的性能,简短干练的暂时绑定一个方法到对象上闭包并调用它。
这个特性旨在提供更安全的方式解包不可靠的数据。它经过白名单的方式来防止潜在的代码注入。
新增长的 IntlChar 类旨在暴露出更多的 ICU 功能。这个类自身定义了许多静态方法用于操做多字符集的 unicode 字符。Intl是Pecl扩展,使用前须要编译进PHP中,也可apt-get/yum/port install php5-intl
以上例程会输出:
10ffff
COMMERCIAL AT
bool(true)
预期是向后兼用并加强以前的 assert() 的方法。 它使得在生产环境中启用断言为零成本,而且提供当断言失败时抛出特定异常的能力。 老版本的API出于兼容目的将继续被维护,assert()如今是一个语言结构,它容许第一个参数是一个表达式,而不只仅是一个待计算的 string或一个待测试的boolean。
以上例程会输出:
Fatal error: Uncaught CustomError: Some error message
接收两个参数做为被除数和除数,返回他们相除结果的整数部分。
var_dump(intdiv(7, 2));
输出int(3)
新增两个函数: random_bytes() and random_int().能够加密的生产被保护的整数和字符串。总之随机数变得安全了。
random_bytes — 加密生存被保护的伪随机字符串
random_int —加密生存被保护的伪随机整数
新增了一个函数preg_replace_callback_array(),使用该函数可使得在使用preg_replace_callback()函数时代码变得更加优雅。在PHP7以前,回调函数会调用每个正则表达式,回调函数在部分分支上是被污染了。
如今,session_start()函数能够接收一个数组做为参数,能够覆盖php.ini中session的配置项。
好比,把cache_limiter设置为私有的,同时在阅读完session后当即关闭。
这个是用来统计服务请求时间的,并用ms(毫秒)来表示
echo "脚本执行时间 ", round(microtime(true) - $_SERVER["REQUEST_TIME_FLOAT"], 2), "s";
empty() 如今支持传入一个任意表达式,而不只是一个变量
输出
This will be printed.
php://input 开始支持屡次打开和读取,这给处理POST数据的模块的内存占用带来了极大的改善。
Session提供了上传进度支持,经过$_SESSION[“upload_progress_name”]就能够得到当前文件上传的进度信息,结合Ajax就能很容易实现上传进度条了。
详细的看http://www.laruence.com/2011/10/10/2217.html
能够上传超过2G的大文件。
GMP 对象支持操做符重载和转换为标量,改善了代码的可读性,如:
实现了JsonSerializable接口的类的实例在json_encode序列化的以前会调用jsonSerialize方法,而不是直接序列化对象的属性。
参考http://www.laruence.com/2011/10/10/2204.html
e修饰符是指示preg_replace函数用来评估替换字符串做为PHP代码,而不仅是仅仅作一个简单的字符串替换。不出所料,这种行为会源源不断的出现安全问题。这就是为何在PHP5.5 中使用这个修饰符将抛出一个弃用警告。做为替代,你应该使用preg_replace_callback函数。你能够从RFC找到更多关于这个变化相应的信息。
PHP已经实现了strval、intval和floatval的函数。为了达到一致性将添加boolval函数。它彻底能够做为一个布尔值计算,也能够做为一个回调函数。
PBKDF2全称“Password-Based Key Derivation Function 2”,正如它的名字同样,是一种从密码派生出加密密钥的算法。这就须要加密算法,也能够用于对密码哈希。更普遍的说明和用法示例
A new function called pcntl_async_signals() has been introduced to enable asynchronous signal handling without using ticks (which introduce a lot of overhead).
增长了一个新函数 pcntl_async_signals()来处理异步信号,不须要再使用ticks(它会增长占用资源)
以上例程会输出:
SIGHUP
Support for server push has been added to the CURL extension (requires version 7.46 and above). This can be leveraged through the curl_multi_setopt() function with the new CURLMOPT_PUSHFUNCTION constant. The constants CURL_PUST_OK and CURL_PUSH_DENY have also been added so that the execution of the server push callback can either be approved or denied.
蹩脚英语:
对于服务器推送支持添加到curl扩展(须要7.46及以上版本)。
能够经过用新的CURLMOPT_PUSHFUNCTION常量 让curl_multi_setopt()函数使用。
也增长了常量CURL_PUST_OK和CURL_PUSH_DENY,能够批准或拒绝 服务器推送回调的执行
在过去若是咱们调用一个用户定义的函数时,提供的参数不足,那么将会产生一个警告(warning)。 如今,这个警告被提高为一个错误异常(Error exception)。这个变动仅对用户定义的函数生效, 并不包含内置函数。例如:
输出:
Uncaught Error: Too few arguments to function test(), 0 passed in %s on line %d and exactly 1 expected in %s:%d
禁止动态调用函数以下
assert() - with a string as the first argument
compact()
extract()
func_get_args()
func_get_arg()
func_num_args()
get_defined_vars()
mb_parse_str() - with one arg
parse_str() - with one arg
输出
Warning: Cannot call func_num_args() dynamically in %s on line %d
如下名称不能用于 类,接口或trait 名称命名:
void
iterable
Integer operations and conversions on numerical strings now respect scientific notation. This also includes the (int) cast operation, and the following functions: intval() (where the base is 10), settype(), decbin(), decoct(), and dechex().
mt_rand() will now default to using the fixed version of the Mersenne Twister algorithm. If deterministic output from mt_srand() was relied upon, then the MT_RAND_PHP with the ability to preserve the old (incorrect) implementation via an additional optional second parameter to mt_srand().
rand() and srand() have now been made aliases to mt_rand() and mt_srand(), respectively. This means that the output for the following functions have changes: rand(), shuffle(), str_shuffle(), and array_rand().
The ASCII delete control character (0x7F) can no longer be used in identifiers that are not quoted.
If the error_log ini setting is set to syslog, the PHP error levels are mapped to the syslog error levels. This brings finer differentiation in the error logs in contrary to the previous approach where all the errors are logged with the notice level only.
析构方法在一个不完整的对象(例如在构造方法中抛出一个异常)上将再也不会被调用
call_user_func() 如今在调用一个以引用做为参数的函数时将始终失败。
对字符串使用一个空索引操做符(例如x)将会抛出一个致命错误, 而不是静默地将其转为一个数组
下列ini配置项已经被移除:
session.entropy_file
session.entropy_length
session.hash_function
session.hash_bits_per_character
在PHP7以前,当数组经过 foreach 迭代时,数组指针会移动。如今开始,再也不如此,见下面代码。
PHP5输出:
int(1)
int(2)
bool(false)
PHP7输出:
int(0)
int(0)
int(0)
当使用引用遍历数组时,如今 foreach 在迭代中能更好的跟踪变化。例如,在迭代中添加一个迭代值到数组中,参考下面的代码:
PHP5输出:
int(0)
PHP7输出:
int(0)
int(1)
含十六进制字符串再也不被认为是数字
PHP5输出:
bool(true)
bool(true)
int(15)
string(2) “oo”
PHP7输出:
bool(false)
bool(false)
int(0)
Notice: A non well formed numeric value encountered in /tmp/test.php on line 5
string(3) “foo”
被移除的函数列表以下:
call_user_func() 和 call_user_func_array()从PHP 4.1.0开始被废弃。
已废弃的 mcrypt_generic_end() 函数已被移除,请使用mcrypt_generic_deinit()代替。
已废弃的 mcrypt_ecb(), mcrypt_cbc(), mcrypt_cfb() 和 mcrypt_ofb() 函数已被移除。
set_magic_quotes_runtime(), 和它的别名 magic_quotes_runtime()已被移除. 它们在PHP 5.3.0中已经被废弃,而且 在in PHP 5.4.0也因为魔术引号的废弃而失去功能。
已废弃的 set_socket_blocking() 函数已被移除,请使用stream_set_blocking()代替。
dl()在 PHP-FPM 再也不可用,在 CLI 和 embed SAPIs 中仍可用。
GD库中下列函数被移除:imagepsbbox()、imagepsencodefont()、imagepsextendfont()、imagepsfreefont()、imagepsloadfont()、imagepsslantfont()、imagepstext()
在配置文件php.ini中,always_populate_raw_post_data、asp_tags、xsl.security_prefs被移除了。
new 操做符建立的对象不能以引用方式赋值给变量
PHP5输出:
Deprecated: Assigning the return value of new by reference is deprecated in /tmp/test.php on line 3
PHP7输出:
Parse error: syntax error, unexpected ‘new’ (T_NEW) in /tmp/test.php on line 3
使用相似 ASP 的标签,以及 script 标签来区分 PHP 代码的方式被移除。 受到影响的标签有:<% %>、<%= %>、
在不匹配的上下文中以静态方式调用非静态方法, 在 PHP 5.6 中已经废弃, 可是在 PHP 7.0 中, 会致使被调用方法中未定义 $this 变量,以及此行为已经废弃的警告。
PHP5输出:
Deprecated: Non-static method A::test() should not be called statically, assuming $this from incompatible context in /tmp/test.php on line 8
object(B)#1 (0) {
}
PHP7输出:
Deprecated: Non-static method A::test() should not be called statically in /tmp/test.php on line 8
Notice: Undefined variable: this in /tmp/test.php on line 3
NULL
将浮点数转换为整数的时候,若是浮点数值太大,致使没法以整数表达的状况下, 在以前的版本中,内部函数会直接将整数截断,并不会引起错误。 在 PHP 7.0 中,若是发生这种状况,会引起 E_WARNING 错误,而且返回 NULL。
JSON 扩展已经被 JSOND 扩展取代。
对于数值的处理,有如下两点须要注意的:
第一,数值不能以点号(.)结束 (例如,数值 34. 必须写做 34.0 或 34)。
第二,若是使用科学计数法表示数值,e 前面必须不是点号(.) (例如,3.e3 必须写做 3.0e3 或 3e3)。
在配置文件INI文件中,再也不支持以 # 开始的注释行, 请使用 ;(分号)来表示注释。 此变动适用于 php.ini 以及用 parse_ini_file() 和 parse_ini_string() 函数来处理的文件。
再也不提供 $HTTP_RAW_POST_DATA 变量。 请使用 php://input 做为替代。
在使用 yield 关键字的时候,再也不须要括号, 而且它变动为右联接操做符,其运算符优先级介于 print 和 => 之间。 这可能致使现有代码的行为发生改变。能够经过使用括号来消除歧义。
mcrypt 扩展已通过时了大约10年,而且用起来很复杂。所以它被废弃而且被 OpenSSL 所取代。 从PHP 7.2起它将被从核心代码中移除而且移到PECL中。
对于mb_ereg_replace()和mb_eregi_replace()的 e模式修饰符如今已被废弃
下面是被弃用或废除的 INI 指令列表. 使用下面任何指令都将致使 错误. define_syslog_variables register_globals register_long_arrays safe_mode magic_quotes_gpc magic_quotes_runtime magic_quotes_sybase 弃用 INI 文件中以 ‘#’ 开头的注释. 弃用函数: call_user_method() (使用 call_user_func() 替代) call_user_method_array() (使用 call_user_func_array() 替代) define_syslog_variables() dl() ereg() (使用 preg_match() 替代) ereg_replace() (使用 preg_replace() 替代) eregi() (使用 preg_match() 配合 ‘i’ 修正符替代) eregi_replace() (使用 preg_replace() 配合 ‘i’ 修正符替代) set_magic_quotes_runtime() 以及它的别名函数 magic_quotes_runtime() session_register() (使用 _SESSION 超所有变量替代) session_is_registered() (使用 $_SESSION 超所有变量替代) set_socket_blocking() (使用 stream_set_blocking() 替代) split() (使用 preg_split() 替代) spliti() (使用 preg_split() 配合 ‘i’ 修正符替代) sql_regcase() mysql_db_query() (使用 mysql_select_db() 和 mysql_query() 替代) mysql_escape_string() (使用 mysql_real_escape_string() 替代) 废弃以字符串传递区域设置名称. 使用 LC_* 系列常量替代. mktime() 的 is_dst 参数. 使用新的时区处理函数替代. 弃用的功能: 弃用经过引用分配 new 的返回值. 调用时传递引用被弃用. 已弃用的多个特性 allow_call_time_pass_reference、define_syslog_variables、highlight.bg、register_globals、register_long_arrays、magic_quotes、safe_mode、zend.ze1_compatibility_mode、session.bug_compat4二、session.bug_compat_warn 以及 y2k_compliance。