[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: __construct() вызывается из класса
DarkGuy
Добрый день!
Изучаю PHP, вызываю класс
 languages::output_languages('HELLO');
В бушующем код
$lang = 'ru';
заменю на автоопределение языка, как сделать так, что бы конструктор выполнялся при вызове.

class languages{   
var $lang;

function __construct(){
$lang = 'ru';
}

function output_languages($message, $lang){
$array = parse_ini_file('/languages/'.$lang.".ini");
echo $array[$message];
}
}


Извиняюсь за сумбурные объяснения.
kaww
видимо хотели достичь этого:?
class languages{   

var $lang;

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

function output_languages($message, $lang = null){

if (!$lang) {

$lang = $this->lang;
}
$array = parse_ini_file('/languages/'.$lang.".ini");
echo $array[$message];
}
}


$lang = new languages();
$lang->output_languages('hello');
DarkGuy
Цитата (kaww @ 3.03.2013 - 15:05)
видимо хотели достичь этого:?
class languages{   

var $lang;

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

function output_languages($message, $lang = null){

if (!$lang) {

$lang = $this->lang;
}
$array = parse_ini_file('/languages/'.$lang.".ini");
echo $array[$message];
}
}


$lang = new languages();
$lang->output_languages('hello');

Спасибо дядя волшебник!
kaww
DarkGuy
, только так делать нельзя. Т.к. при каждом вызове будет парситься файл с переводами
DarkGuy
Цитата (kaww @ 3.03.2013 - 15:19)
DarkGuy
, только так делать нельзя. Т.к. при каждом вызове будет парситься файл с переводами

а как быть иначе?
kaww
ну например:

class languages{   

var $lang;

private $_data = array();

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

function output_languages($message, $lang = null){

if (!$lang) {

$lang = $this->lang;
}
if (!isset($this->_data[$lang])) {

$this->load($lang);
}
return $this->_data[$lang][$message];
}

private function load($lang)
{
$this->_data[$lang] = parse_ini_file('/languages/'.$lang.".ini");
}
}

+ проверка на существование файла и ключа в массиве как минимум
DarkGuy
Цитата (kaww @ 3.03.2013 - 15:24)
ну например:

class languages{   

var $lang;

private $_data = array();

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

function output_languages($message, $lang = null){

if (!$lang) {

$lang = $this->lang;
}
if (!isset($this->_data[$lang])) {

$this->load($lang);
}
return $this->_data[$lang][$message];
}

private function load($lang)
{
$this->_data[$lang] = parse_ini_file('/languages/'.$lang.".ini");
}
}

+ проверка на существование файла и ключа в массиве как минимум

что такое _data ?
DarkGuy
все понял
kaww
там лежит результат работы parse_ini_file(), т.е. переводы, $_data - массив, для того чтобы можно было одновременно загружать несколько файлов:
$l  = new languages();
echo $l->output_languages('hello');
echo $l->output_languages('hello', 'ua');
twin
На var не ругается?

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.