PHP在命名空间中声明常量
我想在名称空间内声明常量。当然,我不想让他们在外面被看到 使用define()将不起作用,因为它使常量成为全局常量,而不管它在哪个命名空间中执行(如果我理解得很好的话) 因此,我可以做: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
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
之前,我需要声明命名空间内容的文件?