0

我在试图找出这样做的有效性时遇到了问题。假设我有一个名为的语言文件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;  
    }
}   

以上当然是不可能的,但我实际上已经没有办法以最有效的方式做这样的事情了。有任何想法吗?

4

2 回答 2

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);
?>
于 2013-06-09T05:57:18.933 回答
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;  
    }
}   
于 2013-06-09T05:53:20.477 回答