Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/229.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_Namespaces_Constants - Fatal编程技术网

PHP在命名空间中声明常量

PHP在命名空间中声明常量,php,namespaces,constants,Php,Namespaces,Constants,我想在名称空间内声明常量。当然,我不想让他们在外面被看到 使用define()将不起作用,因为它使常量成为全局常量,而不管它在哪个命名空间中执行(如果我理解得很好的话) 因此,我可以做: namespace paths; const models = 'Models/'; const views = 'Views/'; const classes = 'Classes/'; 在其他地方: require_once(paths\models.'user.php'); // works r

我想在名称空间内声明常量。当然,我不想让他们在外面被看到

使用define()将不起作用,因为它使常量成为全局常量,而不管它在哪个命名空间中执行(如果我理解得很好的话)

因此,我可以做:

namespace paths;

const models  = 'Models/';
const views   = 'Views/';
const classes = 'Classes/';
在其他地方:

require_once(paths\models.'user.php'); // works
require_once(models.'user.php');       // fails
如果我这样做:

namespace ns;
namespace subNs;
我是在ns\subNs中还是在subNs中


PS:我知道做一次require_('Models/user.php');会更简单,但这只是一个例子。

ad1。是的,你可以。可以通过运行示例脚本进行检查;(但您可能必须先使用
\paths\constant
使用路径;


公元2年。子网可以通过
echo\uuuuu名称空间\uuuuu

你不能做你想做的事

在require函数中使用常量“models”的唯一方法是,如果它被定义为您所声明的您不想做的

你为什么不写一个类来做这个呢

<?php
class PATHS {

    public $models = null;
    public $views = null;
    public $classes = null;

    public function __construct($namespace) {

         switch ($namespace) {
            case 'path1' :
                $this->models = 'my_custom_path/models';
                $this->$views = 'my_custom_path/views';
                $this->classes = 'my_custom_path/classes';
             break;
             case 'path2' :
                $this->models = 'my_custom_path/models';
                $this->$views = 'my_custom_path/views';
                $this->classes = 'my_custom_path/classes';
             break;
             default :
                $this->models = 'my_custom_path/models';
                $this->$views = 'my_custom_path/views';
                $this->classes = 'my_custom_path/classes';
             break;
         }

    }

}

$paths =new PATHS('my_namespace');

echo $paths->models;
echo $paths->views;
echo $paths->classes;

?>

我不完全理解你的最终目标是什么,但我想我明白了它的要点,一个类似的类变成一个对象应该可以实现你想要的

您只需在必要时将该类包含在框架中即可


希望这有助于

您可以使用define来声明名称空间常量,如下所示:

<?php namespace paths;
// Preferred way in a file that does not declare the namespace:
define('paths\\models', 'Models/');
define('paths\\views', 'Views/');
define('paths\\classes', 'Classes/');

// Preferred way in file with the namespace declared:
const models  = 'Models/';
const views   = 'Views/';
const classes = 'Classes/';
?>


在PHP5.6中,您将能够通过“use”关键字自动加载常量,请参见此处:

我有包含类和nammed的文件夹:模型、视图和类。在使用PHP5.3之前,我使用define()简单地定义了常量,并使用了模型、视图、类等。。。我想使用名称空间和常量使其更干净,并最终在某些情况下缩短编写时间。一开始我不明白你的问题。但是我的帖子可能会帮助其他人,所以我会把它放在那里。无论如何,谢谢你的帮助。请注意,如果你在目录树中将名称空间移动到单独的文件中,你可能需要手动包含它,自动加载不会触发命名空间常量/函数/您的意思是,在使用
name\myConstant
之前,我需要声明命名空间内容的文件?