因为在定义或类常量中不能有数组,所以我想我应该为我的项目创建一个配置数据的抽象类,它需要更多的结构而不是简单的值。
起初,我认为我应该尝试类似以下的操作,但这导致了第6行出现语法错误:
<?php
abstract class Config
{
static private
$paths = array (
'classes' . _DS . 'cmsItems',
'classes' . _DS . 'dbdrivers',
'classes' . _DS . 'core'
);
static public function getPaths ()
{
return self::$paths;
}
}
?>
然后,我尝试在getter中定义一个静态数组,而不是私有属性。
<?php
abstract class Config
{
static public function getPaths ()
{
static $paths = array (
'classes' . _DS . 'cmsItems',
'classes' . _DS . 'dbdrivers',
'classes' . _DS . 'core'
);
return $paths;
}
}
?>
这只会导致第7行出现语法错误
但是如果我删除static关键字..。
<?php
abstract class Config
{
static public function getPaths ()
{
$paths = array (
'classes' . _DS . 'cmsItems',
'classes' . _DS . 'dbdrivers',
'classes' . _DS . 'core'
);
return $paths;
}
}
?>
这似乎工作得很好(除了现在每次运行函数时都会创建数组,这在我看来有点浪费)。
有人能解释一下这是怎么回事吗?
(仅供参考,_DS在其他地方定义,只是DIRECTORY_SEPARATOR的别名)
发布于 2011-04-07 06:04:01
引用页面:
与任何其他
静态变量一样,静态属性只能使用文字或常量进行初始化;表达式不允许使用。
是的,就在那之后,有人说:
因此,虽然您可以将静态属性初始化为整数或数组(例如),但您不能将其初始化为另一个变量、函数返回值或对象。
但是,仍然禁止使用表达式。
使用此命令时:
static private
$paths = array (
'classes' . _DS . 'cmsItems',
'classes' . _DS . 'dbdrivers',
'classes' . _DS . 'core'
);
您在其中有表达式--我在考虑字符串连接:数组的内容不是常量,它在编译时是未知的(只看这部分代码是无法知道的)。
如果您删除了这些表达式,您的代码将如下所示(例如,我只是将字符串中的连接替换为``_ ):
static private
$paths = array (
'classes_cmsItems',
'classes_dbdrivers',
'classes_core'
);
将不会有任何表达式--因此,没有错误。
发布于 2011-04-07 06:05:59
来自:http://php.net/manual/en/language.oop5.static.php
与任何其它PHP静态变量一样,静态属性只能使用文字或常量进行初始化;不允许使用表达式。因此,虽然可以将静态属性初始化为整数或数组(例如),但不能将其初始化为另一个变量、函数返回值或对象。
您的代码行:'classes' . _DS . 'cmsItems'
是一个表达式,因此是错误的。
https://stackoverflow.com/questions/5573481
复制相似问题