从类

时间:2017-12-06 18:56:21

标签: php constants

我似乎遇到了访问类常量的问题。我有一个定义一些常量的配置类

<?php

class Config
{
   //define my constants
   const DB_HOST = "127.0.0.1";
}

然后我有一个应该使用这些常量的应用程序类

class Application {

    /** @var Config **/
    private $config;

    public function __construct(Config $config) {
        $this->config = $config;
    }

    public function execute() {
        $this->transferFile($this->obtainTextFile());
    }

    private function obtainTextFile() {
        //connect to database and write results to text file

        return $textFile;  //path to the generated file
    }  

    private function transferFile($textFile) {
        //return whether the file was successfully SFTP
    }
}

最后,我有一个PHP脚本文件来执行事情

<?php

require __DIR__ . "/../config/Config.php";
require __DIR__ . "/../classes/Application.php";

$config = new Config();
$app = new Application($config);
$app->execute();

现在在我的Application Class中,我试图访问常量。如果这不是一个课程,我通常会做这样的事情

$config::DB_HOST

然而,在一个类中,它告诉我$ config未定义。所以下一个合乎逻辑的步骤就是

$this->config::DB_HOST

但是它告诉我统一变量语法仅在PHP 7中可用。那么,我试过

self::DB_HOST

但这似乎没有任何回报。那么如何访问这些常量呢?我是否需要在Config类中实际创建getter才能访问它们?

任何建议表示赞赏

1 个答案:

答案 0 :(得分:2)

常量不需要它们所属的类的实例。以静态方式引用它,即:

$foo = Config::DB_HOST;

$foo = \Some\Namespace\Stuff\Config::DB_HOST;

如果需要的话。但这基本上就是你所需要的 - 让可以到达(但不是对象 - 它不是必需的)。见http://php.net/manual/en/language.oop5.constants.php

  

然后我尝试了自己:: DB_HOST

这仅在您想要在同一个类中引用const时才有用。仍然值得理解self::static::之间的区别。见http://php.net/manual/en/language.oop5.late-static-bindings.php