Php 从类的outrside访问变量

Php 从类的outrside访问变量,php,function,class,Php,Function,Class,我有一个小问题: 让我们说:我有一个脚本来翻译我的网站。大致是这样的: //getting browser language $lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2); if($lang !== 'pt'){ $lang == 'en'; } 然后,我将包含几个具有转换数组的php文件之一: $path = 'languages/'; include_once($path.$lang.'.php'); transla

我有一个小问题:

让我们说:我有一个脚本来翻译我的网站。大致是这样的:

//getting browser language
$lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
if($lang !== 'pt'){
    $lang == 'en';
}
然后,我将包含几个具有转换数组的php文件之一:

$path = 'languages/';
include_once($path.$lang.'.php');
translate数组的示例:

//pt.php
$translate = array(
'Hello' => 'Olá',
'World' => 'mundo'
); 
因此,现在的主要思想是创建一个word类,该类获取这个数组来翻译字符串,并将第一个字母转换为大写。所以我现在有:

//类word.php

class word {
    public function translate($lang, $string){
        global $translate;
        include('languages/'.$lang.'.php');
        $string = $translate['hello'];
        return $string;
    }

    function uc_sentence($string){
        $string = ucfirst(strtolower($string));
        $string = preg_replace_callback('/[.!?].*?\w/', create_function('$matches', 'return strtoupper($matches[0]);'),$string);
        echo $string;
    }
}
那么,这里发生了什么? 我可以这样做:

$word = new word();
$word->translate('pt',$string);
$word->uc_sentence($string);
它将输出翻译后的字符串。但在我看来,这是一个非常糟糕的编码

我的想法是让include_once('pt.php')可用于类中的所有函数,然后在uc_语句中运行translate


如何实现此操作。

将数组作为
word
构造函数的参数传入:

class word {
    private $words;

    public function __construct(array $words) {
        $this->words = $words;
    }

    // rest of class here
}

// When translating:
$word = new word($translate);
$word->translate('fr', $string);
这个概念被称为依赖项注入,但是如果要传递更多数组,我会这样做:

class word {

    private $words = array();

    public function __construct(array $words) {
        $this->addWords($words);
    }

    public function addWords(array $words) {
        $this->words = array_merge($this->words, $words);
    }

    // rest of class here

}

再加上一个建议。为什么不把它设为
保护
,这样全家就可以享受
$words
?;)