PHP Key =>使用Static :: Variables的值数组

时间:2013-05-01 12:42:38

标签: php arrays

有人可以告诉我为什么这段代码不起作用?这似乎是执行建议任务的最有效方式,我不明白为什么我一直收到错误 - 即使我反转了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);
    }

}

但我一直收到这个错误......?

谢谢!

2 个答案:

答案 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