简体   繁体   English

从类外部访问变量

[英]Accessing variables from outside of class

I'm having an issue trying to figure out an effective of doing this. 我有一个问题试图找出这样做的有效方法。 Suppose I have a language file called fr.php wher some variables exist in there as: 假设我有一个名为fr.php的语言文件,其中存在一些变量:

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

Now suppose I have a method in one of my classes that needs to access some of these variables. 现在假设我的一个类中有一个方法需要访问其中一些变量。

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;  
    }
}   

The above is not possible of course, but I've actually run out of options on how to do something like this in the most effective way. 当然,上述情况是不可能的,但我实际上已经没有选择如何以最有效的方式做这样的事情。 Any ideas? 有任何想法吗?

Assuming your class looks somewhat like this: 假设你的课看起来像这样:

<?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;
        }
    }
}
?>

You can get the language file from the constructor while creating the class. 您可以在创建类时从构造函数中获取语言文件。

You should also have fr.php , as well as all your other language files return the array at the end. 您还应该有fr.php ,以及所有其他语言文件最后返回数组。 That way it can be utilized by the main script without having to know the variable name in question. 这样它可以被主脚本使用,而不必知道有问题的变量名称。

fr.php fr.php

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

You can create the class in another file like this now: 您现在可以在另一个文件中创建类:

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

fr.php Notice the return $lang; fr.php注意return $lang;

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

Other file Notice the $lang = require_once 'fr.php'; 其他文件注意$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;  
    }
}   

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM