Heim > Backend-Entwicklung > PHP-Tutorial > PHP v5.3 新特性

PHP v5.3 新特性

WBOY
Freigeben: 2016-06-13 12:29:33
Original
1094 Leute haben es durchsucht

1)_callStatic() magic 方法

classFoo
{
    publicstaticfunction__callStatic( $name, $args)
    {
        echo"Called method $name statically";
    } 
 
    publicfunction__call( $name, $args)
    {
        echo"Called method $name";
    }
}
Nach dem Login kopieren

Foo::dog();       
// outputs "Called method dog statically"
$foo= newFoo;
$foo->dog();      
// outputs "Called method dog"
Nach dem Login kopieren

2)<span style="font-family:nsimsun">动态调用函数</span>

classDog
{
    publicfunctionbark()
    {
        echo"Woof!";
    }
<span style="color: #333399;">} 
 
$class= "Dog"
$action= "bark";
$x= new$class(); 
// instantiates the class "Dog"
$x->$action();     
// outputs "Woof!" </span>
Nach dem Login kopieren

3) 标准PHP库(SPL)

加了了少数几个容器类,比如,栈(SplStack)和固定数组(SplFixedArray)

$stack= newSplStack(); 
 
// push a few new items on the stack
$stack->push("a");
$stack->push("b");
$stack->push("c"); 
 
// see how many items are on the stack
echocount($stack); 
// returns 3 
 
// iterate over the items in the stack
foreach( $stackas$item)
    echo"[$item],";
// the above outputs: 1
 
 [/c],[b],[a]  
// pop an item off the stack echo $stack->pop(); // returns "c"   // now see how many items are on the stack echo count($stack); // returns 2
Nach dem Login kopieren

4) Closures 功能

关于Closures,这是一个把函数定义成变量的玩意。让我们看几个例子:

示例一:

$string= "Hello World!";
$closure= function() use($string) { echo$string; };
 
$closure();
Nach dem Login kopieren

Output:
Hello World!
示例二 使用引用的变量

$x= 1
$closure= function() use(&$x) { ++$x; }
 
echo$x. "\\n";
$closure();
echo$x. "\\n";
$closure();
echo$x. "\\n";
Nach dem Login kopieren

Output:
1
2
3
示例三,返回值

functiongetAppender($baseString)
{
      returnfunction($appendString) use($baseString)
  { return$baseString.$appendString; };
}
Nach dem Login kopieren

示例四,Reflection

classCounter
{
      private$x;
 
      publicfunction__construct()
      {
           $this->x = 0;
      }
 
      publicfunctionincrement()
      {
           $this->x++;
      }
 
      publicfunctioncurrentValue()
      {
           echo$this->x . "\\n";
      }
}
$class= newReflectionClass("Counter");
$method= $class->getMethod("currentValue");
$closure= $method->getClosure()
$closure();
$class->increment();
$closure();
Nach dem Login kopieren

Output:
0
1
示例五,Reflection API

$closure= function($x, $y= 1) {};
$m= newReflectionMethod($closure);
Reflection::export ($m);
<strong>Output</strong>:
Method [  publicmethod __invoke ] {
  - Parameters [2] {
    Parameter #0 [  $x]
    Parameter #1 [  $y]
  }
}
Nach dem Login kopieren

示例六,Uses Case

$logdb= function($string) { Logger::log("debug","database",$string);};
$db= mysqli_connect("server","user","pass");
$logdb("Connected to database");
$db->query("insert into parts (part, description) values
 ("Hammer","Pounds nails");
$logdb("Insert Hammer into to parts table");
$db->query("insert into parts (part, description) values
       ("Drill","Puts holes in wood");
$logdb("Insert Drill into to parts table");
$db->query("insert into parts (part, description) values
 ("Saw","Cuts wood");
$logdb("Insert Saw into to parts table");
Nach dem Login kopieren

更为详细的文章,请参考这里,链接。

5) 使用namespace

新版的PHP会开始支持C++式的namespace,请参看示例:

示例一

/* Foo.php */
<?php
namespaceFoo;
functionbar()
{
    echo"calling bar....";
}
?> 
 
/* File1.php */
<?php
include"./Foo.php";
Foo/bar(); 
// outputs "calling bar....";
?> 
 
/* File2.php */
<?php
include"./Foo.php";
useFoo asns;
ns/bar(); 
// outputs "calling bar....";
?> 
 
/* File3.php */
<?php
include"./Foo.php";
useFoo;
bar(); 
// outputs "calling bar....";
?>
<!--p include"./Foo.php"; useFoo; bar(); 
// outputs "calling bar....";-->
Nach dem Login kopieren

示例二,多重namespace

<!--p namespaceFoo; classTest {}  namespaceBar; classTest {}  $a= newFoo\\Test; $b= newBar\\Test;  var_dump($a, $b);--> <?php
namespaceFoo;
classTest {} 
 
namespaceBar;
classTest {} 
 
$a= newFoo\\Test;
$b= newBar\\Test; 
 
var_dump($a, $b); 
 
Output:
object(Foo\\Test)#1 (0) {
}
object(Bar\\Test)#2 (0) {
}
<strong>Output:</strong>
object(Foo\\Test)#1 (0) { }
object(Bar\\Test)#2 (0) { }
Nach dem Login kopieren

示例三,不同文件中的namespace

/*定义*/
/* global.php */
<?php
functionhello()
{
    echo"hello from the global scope!";
}
?> 
 
/* Foo.php */
<?php
namespaceFoo;
functionhello()
{
    echo"hello from the Foo namespace!";
}
?> 
 
/* Foo_Bar.php */
<?php
namespaceFoo/Bar;
functionhello()
{
    echo"hello from the Foo/Bar namespace!";
}
?>
<!--p namespaceFoo/Bar; functionhello() {     echo"hello from the Foo/Bar namespace!"; }-->
 
/*使用 */
<!--p include"./global.php"; include"./Foo.php"; include"./Foo_Bar.php"; useFoo;  hello();         
// outputs "hello from the Foo namespace!" Bar\\hello();   // outputs "hello from the Foo/Bar namespace!" \\hello();       // outputs "hello from the global scope!"--><?php
include"./global.php";
include"./Foo.php";
include"./Foo_Bar.php";
 
useFoo; 
 
hello();         
// outputs "hello from the Foo namespace!"
Bar\\hello();   
// outputs "hello from the Foo/Bar namespace!"
\\hello();       
// outputs "hello from the global scope!"
?>
Nach dem Login kopieren

更为详细的文章,请参考这里,链接。

6)开始支持Achieve包

正像JAR一样,PHP也要开始支持自己的Achieve包了,叫作,Phar。PHP提供了一整套函数来帮助开发人员创建和使用Phar,正如下面的示例所示:

创建

$p= newPhar("/path/to/my.phar",
 CURRENT_AS_FILEINFO | KEY_AS_FILENAME, "my.phar");
$p->startBuffering();
Nach dem Login kopieren

创建文件存根(stub)

$p->setStub("<!--p Phar::mapPhar();  include "phar:
//myphar.phar/index.php"; __HALT_COMPILER();-->");
Nach dem Login kopieren

加入文件

$p["file.txt"] = "This is a text file";
$p["index.php"] = file_get_contents("index.php");
$p["big.txt"] = "This is a big text file";
$p["big.txt"]->setCompressedBZIP2();
//加入某目录下所有的文件
$p->buildFromDirectory("/path/to/files","./\\.php$/");
Nach dem Login kopieren

使用Phar

include"myphar.phar";
include"phar://myphar.phar/file.php";
Nach dem Login kopieren

更为详细的文章,请参考这里,链接。

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage