Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-从变量到常量的值_Php_Oop_Variables_Constants - Fatal编程技术网

PHP-从变量到常量的值

PHP-从变量到常量的值,php,oop,variables,constants,Php,Oop,Variables,Constants,我正在学习PHP中的OOP,我想把值从变量变成类常量。我该怎么做 这是我的代码(不工作!): 有什么解决方案吗?如何从变量中获取值,添加字符串并将其设置为常量?在OOP中?从手册页可以找到: The value must be a constant expression, not (for example) a variable, a property, a result of a mathematical operation, or a function call. 常量不能有变量 我建议

我正在学习PHP中的OOP,我想把值从变量变成类常量。我该怎么做

这是我的代码(不工作!):

有什么解决方案吗?如何从变量中获取值,添加字符串并将其设置为常量?在OOP中?

从手册页可以找到:

The value must be a constant expression, not (for example) a variable, a property, a result of a mathematical operation, or a function call. 

常量不能有变量

我建议您不要依赖于
$\u服务器['DOCUMENT\u ROOT']
,相反,您可以自己定义
根目录

例如,在文档根目录中有一个
config.php
,您可以这样做

define('ROOT', __DIR__.'/'); // php version >= 5.3
define('ROOT', dirname(__FILE__).'/'); // php version < 5.3
define('ROOT',_DIR__.'/');//php版本>=5.3
定义('ROOT',目录名(_文件_)。'/');//php版本<5.3

然后改用
根目录

为什么不在
\uu构造()中设置它呢。从技术上讲,这就是它的目的

class Dir {

    public function __construct() {
        self::ROOT = $_SERVER['DOCUMENT_ROOT']."project/";
    }
}

我建议您使用这个解决方案,因为您想要使用OOP,并且所有这些都必须在类内部。因此,由于const或static var直接使用是不可能的,因此我将使用静态函数:

class Dir
{
    public static function getRoot()
    {
        return $_SERVER['DOCUMENT_ROOT'] . 'project/';
    }
}
你可以像这样使用它

Dir::getRoot();

1:你犯了什么错误。2:你试过什么3:为什么要在类级别定义常数,而显然它是属于全局级别的常数3:尝试将root更改为
PROJECT\u root
,因为
root
是一个危险的常数,很难在注释中定义(如果你问我的话,太接近环境变量),不建议在类中使用全局常量。如果希望重用类,但不需要全局范围中的任何常量,会发生什么情况?对于此类数据,请使用getter和setter。+1-OP可以使用静态属性,而不是使用类常量:
static$root=$\u SERVER['DOCUMENT\u root']。“project/”
yes,这可能是一个选项,但您可以在此处找到“声明为静态的属性不能通过实例化的类对象访问”。。可能是定义此值的配置文件(可以是类)。。可以将其定义为字符串并在每个服务器上更改(与任何配置值一样)为了避免依赖$\u服务器超全局..jsut意味着不能像
$instance->root
那样访问它,您必须始终执行
类名::$root
,但您肯定可以从实例访问和更改该值-您jsut需要使用静态表示法。您不能用变量是愚蠢的。如果PHP就是这样建立的,那么编写该标准的委员会在某些基本的计算机科学概念方面是不称职的。常量的目的是防止程序员像更改变量那样意外更改其值。这并不是为了阻止任何变量被用来创建常量。您可以很容易地尝试从变量中获取一个值,并将其锁定为不变常量。根据CS的前提,这是完全有效的。
Dir::getRoot();