有人可以告诉我为什么这段代码不起作用?这似乎是执行建议任务的最有效方式,我不明白为什么我一直收到错误 - 即使我反转了Key<> Value。
我试图用static :: variables替换文本字符串/数组中的#tags#形成一个外部类。
错误:
Parse error: syntax error, unexpected T_VARIABLE, expecting T_STRING in /home/content/57/10764257/html/marketing/includes/ProcessEmail.class.php on line 5
外部课程:
class MyClass {
public static $firstName = "Bob"; // Initally set as "= null", assigned
public static $lastName = "Smith"; // statically through a call from
} // another PHP file.
主要PHP文件:
// This is the array of find/replace strings
private static $tags = array("#fistName#", MyClass::$firstName,
"#lastName#", MyClass::$lastName);
// This jumps trough the above tags, and replaces each tag with
// the static variable from MyClass.class.php
public static function processTags($message) {
foreach ($tags as $tag => $replace) {
$message = str_replace($tag, $replace, $message);
}
}
但我一直收到这个错误......?
谢谢!
答案 0 :(得分:4)
来自http://php.net/manual/en/language.oop5.static.php
与任何其他PHP静态变量一样,静态属性只能使用文字或常量初始化;表达式是不允许的。因此,虽然您可以将静态属性初始化为整数或数组(例如),但您可能不会将其初始化为另一个变量,函数返回值或对象。
因此,您不能将MyClass::$firstName
用作静态属性的值。
另一种解决方案是使用const
代替static
。 (PHP> 5.3)
class MyClass {
const firstName = "Bob";
const lastName = "Smith";
}
class MyClass2 {
public static $tags = array(
'firstName' => MyClass::firstName,
'LastName' => MyClass::lastName
);
}
print_r(MyClass2::$tags);
答案 1 :(得分:3)
尝试将代码替换为:
<?php
class MyClass {
private static $tags = array(
'#firstName#' => 'Bob',
'#lastName#' => 'Smith'
);
public static function processTags(&$message) {
foreach (self::$tags as $tag => $replace) {
$message = str_replace($tag, $replace, $message);
}
}
}
$message = 'Hello, my name is #firstName# #lastName#';
MyClass::processTags($message);
echo($message);
Hello, my name is Bob Smith