例如,我在文件中有A类。
namespace PathTo;
class A {
const SOME_VAR = 'value';
// many functions
}
我在文件中有B类B.php
use PathToA;
class B {
public function foo() {
$i = 1;
$i = 2;
$i = 3;
// other code
$someVar = A::SOME_VAR;
}
// other functions
}
执行函数foo
中的哪个时间CC_1 SOME_VAR
在RAM中加载。在FOO的第一线或在线$someVar = A::SOME_VAR;
或LINE use PathtoA;
或其他地方?
a.php
在b.php
内执行时,读取,解析和执行。那也是将'value'
字符串加载到内存中的时候。
同时,加载了有关A
类的所有内容。如果您将const SECOND_VAR = 'another-value';
添加到类A
的位置,一旦执行$someVar = A::SOME_VAR;
,也将有一些RAM包含'another-value'
。
use PathToA;
行所做的,只是告诉PHP"如果请求类A
,则其意思是PathToA
"。您可以添加use SomeNonExistentClass
和use SomeClassThatHasASyntaxErrorInTheCode
,并且什么都不会改变,因为只要您不尝试使用ExistentClass
或ASyntaxErrorInTheCode
PHP实际做任何事情
首次请求变量值时,正在分配内存。一个简单的测试方法是:
创建一个名为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对该变量一无所知。