【发布时间】:2012-03-30 14:39:49
【问题描述】:
我们的暂存服务器正在生成一个解析错误,我想知道我们的预暂存服务器是否让我们的开发团队因语法错误而侥幸。
这是导致“解析错误”的代码:
// GLOBALS.PHP
<?php
session_start();
class ItemsFromBronzeAge {
static public $ITEMNAMELABEL = "ItemName";
}
class Labels {
static public $USER_PROMPT_ITEMNAME = "Item name here....";
}
?>
我们将上面的 globals.php 包含在第二个文件中——称为 index.php——如下所示:
// INSIDE OF INDEX.PHP
<?php
require_once 'globals.php'; // variables and statics used throughout
// the next line is line #12 in the 'Parse error' message below
$_SESSION[ItemsFromBronzeAge::$ITEMNAMELABEL] = Labels::$USER_PROMPT_ITEMNAME;
?>
这是我们在 1and1.com 登台服务器上运行 index.php 时的解析错误:
" Parse error: syntax error, unexpected ']',
expecting '(' in index.php on line 12"
只是为了驱动这个回家,我们将 index.php 中代码中的第 12 行更改为这个,并且 1and1.com 登台服务器不再报告“解析错误”:
// WE CHANGED FROM THIS:
$_SESSION[ItemsFromBronzeAge::$ITEMNAMELABEL] = Labels::$USER_PROMPT_ITEMNAME;
// TO THIS AND THE 'PARSE ERROR' GOES AWAY -- THIS CODE WORKS ON THE STAGING SERVER:
$_SESSION["ItemName"] = "Item name here....";
我们的团队没有办法回顾我们所有的源代码,放弃使用常量作为数组索引并回归使用字符串文字作为数组索引。
我的问题是——我们的预登台开发服务器是否让我们摆脱了上面不正确的语法,或者 1and1.com 是否有某种 PHP 设置不正常,或者.......?
我的意思是使用公共静态类成员作为数组索引——这是司空见惯的。
【问题讨论】:
-
看不到任何语法错误,我的本地测试工作正常。不过,您可能应该使用类常量而不是静态公共属性,例如
const ITEMNAMELABEL = "ItemName";。正在使用哪些版本的 PHP? -
我认为这是因为“static public”应该是 public static $var="Something";
-
@Phil,这是我们愿意做出的 100% 的改变,谢谢,1and1 还没有回复我们,等待对开发工作完全不利。谢赫,我将在我们位于 1and1.com 的登台服务器上运行一个简短的测试用例,看看将顺序从“静态公共”颠倒到您对“公共静态”的建议是否有效果——据我们所知,我们的预登台服务器只是让我们摆脱了 'static public $var = "theText" -- 我会在测试后发回 -- 谢谢!
-
@wantTheBest 我的两个开发箱(5.3.6 和 5.3.9)都可以与
static public配合使用。顺序不重要