从类外部访问变量

时间:2013-06-09 05:50:11

标签: php

我正试图找出有效的方法。 假设我有一个名为fr.php的语言文件,其中存在一些变量:

$lang["W_TYPE"]["COMPLETE"] = "Completé";
$lang["W_TYPE"]["INCOMPLETE"] = "Incomplet";
$lang["W_TYPE"]["BO"] = "En attente";

现在假设我的一个类中有一个方法需要访问其中一些变量。

public function getCompletion($string = true)
{
    $x = $this->COMPLETION;
    if($string)
    {
        echo $lang["W_TYPE"]["COMPLETE"];
        if($x==self::ORDER_COMPLETE)
        {
            return "<font class='jobComplete'>".$lang["W_TYPE"]["COMPLETE"]." &#x2713;</font>";
        }
        elseif($x==self::INCOMPLETE)
        {
            return "<font class='jobIncomplete'>".$lang["W_TYPE"]["INCOMPLETE"]."...</font>";
        }
        elseif($x==self::BACK_ORDER)
        {
            return "<font class='backOrder'>".$lang["W_TYPE"]["BO"]."...</font>";
        }
    }
    else
    {
        return $x;  
    }
}   

上述情况当然是不可能的,但我实际上已经没有选择如何以最有效的方式做这样的事情了。有什么想法吗?

2 个答案:

答案 0 :(得分:2)

假设你的班级看起来像这样:

<?php
class CompleteClass
{

    function __construct($lang)
    {
        $this->lang = $lang;
    }

    public function getCompletion($string = true)
    {
        $lang = $this->lang;
        $x    = $this->COMPLETION;
        if ($string) {
            echo $lang["W_TYPE"]["COMPLETE"];
            if ($x == self::ORDER_COMPLETE) {
                return "<font class='jobComplete'>" . $lang["W_TYPE"]["COMPLETE"] . " &#x2713;</font>";
            } elseif ($x == self::INCOMPLETE) {
                return "<font class='jobIncomplete'>" . $lang["W_TYPE"]["INCOMPLETE"] . "...</font>";
            } elseif ($x == self::BACK_ORDER) {
                return "<font class='backOrder'>" . $lang["W_TYPE"]["BO"] . "...</font>";
            }
        } else {
            return $x;
        }
    }
}
?>

您可以在创建类时从构造函数中获取语言文件。

您还应该有fr.php,以及所有其他语言文件最后返回数组。这样,它可以被主脚本使用,而不必知道有问题的变量名称。

fr.php

$lang["W_TYPE"]["COMPLETE"] = "Completé";
$lang["W_TYPE"]["INCOMPLETE"] = "Incomplet";
$lang["W_TYPE"]["BO"] = "En attente";
return $lang;

您现在可以在另一个文件中创建类:

<?php
    $lang = require_once 'fr.php';
    $completeClass = new CompleteClass($lang);
    echo $completeClass->getCompletion(true);
?>

答案 1 :(得分:0)

fr.php注意return $lang;

$lang["W_TYPE"]["COMPLETE"] = "Completé";
$lang["W_TYPE"]["INCOMPLETE"] = "Incomplet";
$lang["W_TYPE"]["BO"] = "En attente";
return $lang;

其他文件请注意$lang = require_once 'fr.php';

public function getCompletion($string = true)
{
    $lang = require 'fr.php';
    $x = $this->COMPLETION;
    if($string)
    {
        echo $lang["W_TYPE"]["COMPLETE"];
        if($x==self::ORDER_COMPLETE)
        {
            return "<font class='jobComplete'>".$lang["W_TYPE"]["COMPLETE"]." &#x2713;</font>";
        }
        elseif($x==self::INCOMPLETE)
        {
            return "<font class='jobIncomplete'>".$lang["W_TYPE"]["INCOMPLETE"]."...</font>";
        }
        elseif($x==self::BACK_ORDER)
        {
            return "<font class='backOrder'>".$lang["W_TYPE"]["BO"]."...</font>";
        }
    }
    else
    {
        return $x;  
    }
}