2017-09-21 2 views
2

は、私は、ファイルa.phpphpのクラス内の定数変数は、他のクラスがそれを使用しているときにRAMにロードされますか?例えば

namespace Path\To; 
class A { 

    const SOME_VAR = 'value'; 

    // many functions 
} 

でクラスAを持っていると私はRAMに関数にfoo定数変数SOME_VAR負荷を実行するに

use Path\To\A; 
class B { 

    public function foo() { 

     $i = 1; 
     $i = 2; 
     $i = 3; 
     // other code 

     $someVar = A::SOME_VAR; 

    } 

    // other functions 
} 

時間b.phpファイル内のクラスBを持っています。関数fooの最初の行または$someVar = A::SOME_VAR;の行またはuse Path\to\A;の行、または他の場所?

+0

なぜお尋ねしますか?または、それはあなたの問題にどのように関連していますか? – Progman

+0

問題ありません。私はこのニュアンスを知りたいだけです。 – Log

答えて

3

a.php$someVar = A::SOME_VAR;b.phpの内部で実行すると、解析されて実行されます。それはまた、'value'文字列がメモリにロードされたときです。

同時に、クラスAのすべてがロードされます。 const SECOND_VAR = 'another-value';をクラスAに追加する場合は、$someVar = A::SOME_VAR;が実行されると、'another-value'を含む少しのRAMもあります。

use Path\To\A;の行は、「クラスAが要求されている場合、その意味は\Path\To\Aです」と伝えます。限り、あなたは実際にExistentClassまたはASyntaxErrorInTheCode PHPで何かをしようとしないよう、これらのクラスがであることのファイルを読み込むことはありませんので、あなたはuse Some\Non\ExistentClassuse Some\Class\That\Has\ASyntaxErrorInTheCodeを追加することができ、そして何も変更されます。

0

メモリが割り当てられています最初に変数の値を要求します。それをテストする簡単な方法は以下の通りです:

はFoo.php

どこでもあなたが望む次のファイルを使用し
<?php 

class Foo { 
    // As of PHP 7.1.0 
    public const BAR = 'bar'; 
    private const BAZ = 'baz'; 
} 
?> 

という名前のファイルを作成します。その後、

そして、次の2行を入力:

$x = FOO::BAR; 
$y = FOO::BAZ; // <- this will cause an error, since the variable is private 

エラーなしには、ファイルの使用中に発生する、または以前BAR変数の値を取得中になります。 この方法で、値にアクセスしようとする前にPHPがその変数について何も知らないことがわかります。

関連する問題