×
PHP 7新特性简单认识PHP7如何配置PHP7环境如何在Linux/Unix上安装PHP在Mac OS X系统中的安装PHP使用IIS在Windows上安装PHPApache如何在Windows上安装PHP7功能之标量类型声明返回类型声明在PHP中的使用PHP7空合并运算符如何使用PHP7中如何使用太空船操作符PHP7定义常量数组和匿名类PHP7中Closure :: call使用示例如何使用过滤unserialize()函数PHP7如何使用IntlChar伪随机数产生器CSPRNGPHP7的期望是如何使用的?PHP7如何使用use语句如何进行错误处理的?PHP是如何计算整数除法的?什么是PHP7的Session选项PHP7弃用了哪些功能PHP7中移除的扩展和SAPI

PHP7更新记录

PHP7.2.0 RC6 发布,修复bug

PHP7定义常量数组和匿名类


PHP7 常量数组

在 PHP7 中,如果您需要定义 Array 类型的常量,那么通过使用 define()函数进行定义是一个不错的选择。使用过 PHP 5.6 版本的朋友应该知道,在 PHP5.6 中,只能使用 const 关键字来定义数组类型的常量。

常量数组实例

<?php
   //define a array using define function
   define('fruit', [
      'apple',
      'orange',
      'banana'
   ]);
   print(fruit[1]);
?>

它产生以下浏览器输出 :

orange

PHP7 匿名类

现在,您可以在 PHP7 中使用 new class 来定义(实例化)匿名类。匿名类可以用来代替完整的类定义。

匿名类实例

<?php
   interface Logger {
      public function log(string $msg);
   }

   class Application {
      private $logger;

      public function getLogger(): Logger {
         return $this->logger;
      }

      public function setLogger(Logger $logger) {
         $this->logger = $logger;
      }  
   }

   $app = new Application;
   $app->setLogger(new class implements Logger {
      public function log(string $msg) {
         print($msg);
      }
   });

   $app->getLogger()->log("My first Log Message");
?>

它产生以下浏览器输出:

My first Log Message

可以将参数传递到匿名类的构造器,也可以扩展(extend)其他类、实现接口(implement interface),以及像其他普通的类一样使用 trait:

<?php
class SomeClass {}
interface SomeInterface {}
trait SomeTrait {}

var_dump(new class(10) extends SomeClass implements SomeInterface {
    private $num;

    public function __construct($num)
    {
        $this->num = $num;
    }
    use SomeTrait;
 });
?>

它产生以下浏览器输出:

object(class@anonymous)#1 (1) {
  ["Command line code0x104c5b612":"class@anonymous":private]=>
  int(10)
}

匿名类被嵌套进普通 Class 后,不能访问这个外部类(Outer class)的 private(私有)、protected(受保护)方法或者属性。 为了访问外部类(Outer class)protected 属性或方法,匿名类可以 extend(扩展)此外部类。 为了使用外部类(Outer class)的 private 属性,必须通过构造器传进来:

<?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

分类导航

关注微信下载离线手册

bootwiki移动版 bootwiki
(群号:472910771)