1

有人能告诉我为什么这段代码不起作用吗?这似乎是完成所提议任务的最有效方法,我不明白为什么我不断收到错误 - 即使我反转了 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);
    }

}

但我不断收到这个错误......?

谢谢!

4

2 回答 2

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);
于 2013-05-01T12:47:11.957 回答
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
于 2013-05-01T12:44:52.733 回答