本文实例讲述了PHP7匿名类用法。分享给大家供大家参考,具体如下:
匿名类跟匿名函数一样,创建一次性的简单对象
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
<?php
/**
* Created by PhpStorm.
* User: bee
* Date: 2016/4/24
* Time: 00:17
*/
echo '匿名函数' ;
$anonymous_func = function (){ return 'function' ;};
echo $anonymous_func ();
echo '<br>' ;
echo '<hr>' ;
class common {
public $default = 10;
function __construct( $key ){
$this ->getVal( $key );
}
public function getVal(int $i ):int{
$this -> default += $i ;
return $this -> default +0.1;
}
}
echo '有名函数' ; echo '<br>' ;
$com = new common(1);
echo $com ->getVal(2.2). '--' ;
echo $com ->getVal(2.2). '--' ;
echo ( new common(1))->getVal(8.9);
echo '<hr>' ; echo '匿名类' ;
//定义匿名类需继承
echo ( new class (1) extends common{})->getVal(90); echo '<br>' ;
echo ( new class (2) extends common{})->getVal(90);
|
运行效果图如下:
匿名类被嵌套进普通 Class 后,不能访问这个外部类(Outer class)的 private(私有)、protected(受保护)方法或者属性。 为了访问外部类(Outer class)protected 属性或方法,匿名类可以 extend(扩展)此外部类。 为了使用外部类(Outer class)的 private属性,必须通过构造器传进来:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
<?php
class Outer
{
private $prop = 1;
protected $prop2 = 2;
protected function func1()
{
return 3;
}
public function func2()
{
return new class ( $this ->prop) extends Outer {
private $prop3 ;
public function __construct( $prop )
{
$this ->prop3 = $prop ;
}
public function func3()
{
return $this ->prop2 + $this ->prop3 + $this ->func1();
}
};
}
}
echo ( new Outer)->func2()->func3(); //6
|
匿名函数可以实现闭包,那么相应的匿名类也可以实现闭包
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
<?php
/**
* Created by PhpStorm.
* User: bee
* Date: 2016/4/24
* Time: 1:51
*/
$arr = array ();
for ( $i =0; $i <3; $i ++){
$arr [] = new class ( $i ){
public $index =0;
function __construct( $i )
{
$this ->index = $i ;
echo 'create</br>' ;
}
public function getVal(){
echo $this ->index;
}
};
}
$arr [2]->getVal();
echo '<br>' ;
var_dump( $arr [1]);
|
运行效果图如下:
希望本文所述对大家PHP程序设计有所帮助。