我似乎遇到了访问类常量的问题。我有一个定义一些常量的配置类
<?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才能访问它们?
任何建议表示赞赏
答案 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