Php 在类中使用访问静态数组时出现语法错误
我想访问base_url键并将其分配给新的静态属性$app,但它给了我意外的语法错误[Php 在类中使用访问静态数组时出现语法错误,php,Php,我想访问base_url键并将其分配给新的静态属性$app,但它给了我意外的语法错误[ 您希望访问变量,因此必须添加$ 阅读更多关于这方面的内容 不幸的是,您无法将任何变量(甚至静态变量)分配给其他静态属性,正如您在链接的手册页面中所看到的 与任何其他PHP静态变量一样,静态属性只能使用文字或常量进行初始化;不允许使用表达式。因此,虽然可以将静态属性初始化为整数或数组,但不能将其初始化为其他变量、函数返回值或对象 阅读手册: 与任何其他PHP静态变量一样,静态属性只能使用文字或常量进行初始化;不
您希望访问变量,因此必须添加$ 阅读更多关于这方面的内容 不幸的是,您无法将任何变量(甚至静态变量)分配给其他静态属性,正如您在链接的手册页面中所看到的 与任何其他PHP静态变量一样,静态属性只能使用文字或常量进行初始化;不允许使用表达式。因此,虽然可以将静态属性初始化为整数或数组,但不能将其初始化为其他变量、函数返回值或对象 阅读手册: 与任何其他PHP静态变量一样,静态属性只能使用文字或常量进行初始化;不允许使用表达式。因此,虽然可以将静态属性初始化为整数或数组,但不能将其初始化为其他变量、函数返回值或对象 在你认为这是一个严重的限制之前,让我告诉你为什么这是一个幸运的解脱:
self::$config['base_url']
但是,当您介绍我们都喜欢的后期静态绑定时:
class Foo
{
public static $evil = array('bar' => 123);
public static $check = self::$evil['bar'];
}
Foo::$check;//all is well
TL;TR:静态有点像超全局变量:您可以用一个常量表达式初始化它们,但它们不需要初始化状态,这将是初始疯狂,您初始化静态属性的方式尚未在PHP中实现 您可以查看此线程的说明: 然而,我在我的项目中是这样做的:
class Foo
{
public static $evil = array('bar' => 123);
public static $check = static::$evil['bar'];
}
class Bar extends Foo
{
public static $evil = 123;
}
Bar::$check;//OOOPS
@RaheelKhan噢,我没注意到你想将其分配给另一个静态属性,而不仅仅是使用。请检查编辑后的答案。噢,该死,我可能需要使用getters来实现这一点:所以根据你的示例,我认为非静态属性的情况也是如此?我们会遇到同样的问题。@RaheelKhan:当然,还有一点:对于非静态属性,你不能初始化使用public$foo=$this->bar;alize/声明它们,因为在创建实例之前$this不存在。您必须使用构造函数使用$this初始化属性感谢您提供了很好的解决方案。
class Foo
{
public static $evil = array('bar' => 123);
public static $check = self::$evil['bar'];
}
Foo::$check;//all is well
class Foo
{
public static $evil = array('bar' => 123);
public static $check = static::$evil['bar'];
}
class Bar extends Foo
{
public static $evil = 123;
}
Bar::$check;//OOOPS
<?php
class YourClass {
public static $config = NULL;
public static $app_path = NULL;
public static $_INITIALIZED = FALSE;
public static init() {
if(!self::$_INITIALIZED) {
self::$config = array(
'base_url' => '',
'environment' => '',
'database' => array(
'dbdriver' => '',
'dbhost' => '',
'dbname' => '',
'dbuser' => '',
'dbpass' => ''
));
self::$app_path = self::config['base_url'];
self::$_INITIALIZED = TRUE;
}
}
// ....
// Your Stuf ...
// ....
}
YourClass::init();