PHP在声明一个成员变量时,你可能会遇到以下问题。
这是一个从Java迁移过来的程序员犯的错误。很悲剧,花了许多时间来解决。
遇到情况
我们先来看看,正确的定义一个成员变量。如果学过其他的语言,我们很快就会发现,这样的结构我们是很熟悉的。
一个简单的声明成员变量
class Test{
public $a = "ab";
}
接下来,我们定义的字符串比较长,需要采用字符串的拼接来进行。如果改成这样的命名,将ab与cd拼接在一起,这样就报错了,说语法错误。
错误的拼接了字符串
class Test{
public $a = "ab"."cd";
}
$t = new Test();
echo $t->a;
?>
会出现错误
Parse error: syntax error, unexpected '.', expecting ',' or ';' in ..../test.php on line 4
也许,你曾今见过这样的拼接字符串,而且能够正确运行。
在方法中可以进行字符串拼接,正常工作
$str = "ab"."cd";
echo $str;
而且如果你知道Java语言声明成员变量,那么知道一下定义没问题。
Java中进行成员变量字符串拼接
class Test{
String str="ab"+"cd";
}
从Java的风格到PHP的风格,于是就杯具了。完全不对。看着php中的定义一个字符串没问题,但是在成员变量中就报错误。
原因 – 解释
后来在http://stackoverflow.com/questions/4976717/static-function-variables-and-concatenation-in-php上发现了这个问题的解决。
说了static的静态变量,是不运行进行赋值表达式的,只能使用 literal和const。
同样的,属性中的变量可以初始化,但是初始化的值必须是常数,这里的常数是指 PHP 脚本在编译阶段时就可以得到其值,而不依赖于运行时的信息才能求值。即成员初始化只能使用简单类型(字符串,整形,数组等),不能有函数和运算符。详情请见:http://php.net/manual/zh/language.oop5.properties.php
另外,使用var声明一个成员变量新版本已经废弃了。如果看代码看到这样的,千万不要这样学习。
解决
通过define方法解决。
define('str' ,"ab"."cd");
class Test{
public $a = str;
}
$t = new Test();
echo $t->a;
茶杯头甜蜜终章dlc 官方手机版v1.0.0.3
下载火柴人传说暗影格斗内置菜单 最新版v3.0.1
下载荒野乱斗测试服 安卓版v61.10.3
下载荒野乱斗彩虹服 安卓版v61.10.3
下载寒霜启示录 安卓版v1.25.10
寒霜启示录是一款生存模拟游戏,不少玩家可能对于末日都有着自己
末日城堡免广告版 安卓最新版v0.7.1
末日城堡免广告版是一款非常好玩的模拟经营类游戏,内部可以不看
甜蜜人生模拟器 最新版v1.4.5
甜蜜人生模拟器是一款非常好玩的模拟恋爱手游,玩家在这里能够对
武器锻造师内置功能菜单 v10.4
武器锻造师内置菜单版是游戏的破解版本,在该版本中为玩家提供了
开放空间overfield 安卓版v1.0.5
开放空间Overfield是一款箱庭养成经营手游,让你在广阔