2017-12-06 19 views
0

クラス定数にアクセスする際に問題が発生しているようです。私はその後、クラス内からの定数へのアクセス

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 

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

いくつかの定数を定義しコンフィグクラスを持って、私は物事

<?php 

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

$config = new Config(); 
$app = new Application($config); 
$app->execute(); 
を実行するPHPスクリプトファイルを持っています

アプリケーションクラス内で、定数にアクセスしようとしています。このクラスを波平した場合、私は一般的に、クラス内にあるこの

$config::DB_HOST 

ような何かをするだろうが、それは$設定が定義されていないと言われます。それでは次の論理的なステップがあります

$this->config::DB_HOST 

しかし、それは私に教えてくれます統一変数構文は、PHP 7でのみ利用可能です。だから、私は試しました

self::DB_HOST 

しかし、これは何も返していないようです。どうすればこれらの定数にアクセスできますか?実際にアクセスするには、Configクラス内でゲッターを作成する必要がありますか?

アドバイスあり

答えて

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

+0

本当に?だから私はConfigオブジェクトをアプリケーションコンストラクタに渡す必要がありますか? –

+1

あなたがその目的のためにそれをしたら、それは全く必要ではありません。 http://php.net/manual/en/language.oop5.constants.php –

+0

パーフェクトをご覧ください。 Configがアプリケーションとは別のフォルダにある場合は、自動ロードする必要がありますか? –

関連する問題