Взять данные из переменных функции

Кощей

if(!$needle) die("ooh");
Взять данные из переменных функции

Есть ли такая спец переменаая у функции из которой можно всегда брать неизмененные данные при инете
Что имею ввиду:

function ($line, $code){

$line = $CI->lang->line($line);
// то что я дописываю
if(!$line){
$line = old $line;
}

}

такой вариант не устраивает вообще:
PHP:
function ($line, $code){
 $old_line = $line;
   $line = $CI->lang->line($line);
  // то что я дописываю
 if(!$line){
  $line = $old_line;
 }

}
 

cDLEON

Онанист РНРСlub
а я бы написал, что если $CI->lang->line не находит перевода, возвращает не переведённую строку.
Кстати, я бы и сам не отказался от такого синтаксиса...
 

Кощей

if(!$needle) die("ooh");
cDLEON
эт я хелпер и редактирую

-~{}~ 20.08.08 10:55:

$line = $CI->lang->line($line) ? $CI->lang->line($line) : $line;

по сравнению с
$line ||= $CI->lang->line($line);

конечно грубовото смотрится)
 

advocat

developer
PHP:
function translate($line, $code)
{
    if (!$line = $CI->lang->line($line)) {
        $line = func_get_arg(0);
    }
    return $line;
}
[q]по сравнению с
$line ||= $CI->lang->line($line);[/q]
где такая трава растет ?
 

Кощей

if(!$needle) die("ooh");
вот про что я спрашивал func_get_arg(), ура ! :)

advocat
в республике Perl
 

dimagolov

Новичок
Кощей, а чем плохо так:
PHP:
function translate($line, $code)
{
    $lineN = $CI->lang->line($line);
    return $lineN ? $lineN : $line;
}
в республике Perl
программа должна быть не лаконичной, а понятной. чтобы смотря через месяц-два-год на свой же код не говорить "б%я, и что этим я хотел сказать"
 

Кощей

if(!$needle) die("ooh");
dimagolov
неподходит, там потом еще обработки есть, прям в return пихать не выйдет

для меня оператор ||= вполне ясен и даже через десять лет строка
$str ||= Main_Module::Admin::user_get($id);
будет понятней чем
$str = isset(Main_Module::Admin::user_get($id)) ? Main_Module::Admin::user_get($id) : false;

Вопрос в другом вообще-то был но в этом случае, мне кажется, и лаконично и понятно и кратко :)
 

Ярослав

Новичок
если так сильно нужно то возьми функцию toggle
PHP:
function toggle($arg1, $arg2) {
     return $arg1 ? $arg1 : $arg2;
}

function translate($line, $code) {
    return toggle($CI->lang->line($line), $line);
}
 

dimagolov

Новичок
неподходит, там потом еще обработки есть, прям в return пихать не выйдет
господи, ну тогда не return, а
PHP:
function translate($line, $code)
{
    $lineN = $CI->lang->line($line);
    if ($lineN)
       $line= $lineN;
    // do something with $line
}
 

Кощей

if(!$needle) die("ooh");
dimagolov
это уже дело привычки и вкуса, а ответ на вопрос это func_get_arg()
 

advocat

developer
[offtop]
dimagolov
я так подозреваю, что ты там пропустил &, если уже на то пошло :)
[/offtop]
а насчет return - имхо более правильно будет выглядеть конструкция
PHP:
echo helper('module')->__('translate string');
нежели
PHP:
$str = 'translate string';
helper('module')->__($str);
echo $str
 

Кощей

if(!$needle) die("ooh");
advocat
что-то я про два подчекивания не знаю, что они делают ?
 

dimagolov

Новичок
advocat, ничего я не пропускал, у автора & не было. вся тема построена на том, что получаем нечто параметром, потом преобразовываем и если преобразование неуспешно, то используем дальше полученное изночально значение.
собственно я бы вместо того, чтобы $CI->lang->line($line); возвращал пустое значение (или false) при невозможности преобразовать (как это у ТС), сделал бы в таком случае возврат исходной строки и не парился больше в местах, где происходит такой вызов.
 

advocat

developer
dimagolov
не совсем внимательно прочел сообщение, по этому просто & почему-то сразу подумалось
относительно того, чтобы $CI->lang->line($line); при невозможности перевести строку возвращал оригинальную строку, имхо правильный подход в т.ч. к самому проектированию

Кощей
В проекте, с которым я в основном работаю, __() равносильно вызову транслейта, ниже напишу почему именно __
При этом используется 3 варианта использования,
1. сама ф-ция (не рекомендованное использование) которая ищет совпадение по всем транслейтам, всех модулей
2. $this->__() в "определенных" правильно отнаследованных классах (при этом если не указан четко модуль, равносильно варианту 1)
3. использование через helper -> Mage::helper('module_name')->__()

Соотвественно, если транслейт не найден - вернется оригинальная строка. Также __() умеет работать с например __('Translate v.%d.%d', 1, 1)

Ярослав
я советую для начала попробовать включить gettext, если конечно под вызовом _ не подразумевается вызов php fnc "_" (псевдоним функции - 'gettext') :) [m]_[m]
Почему именно 2 андерскора, да потому что удобно, и потому что 1 андерскор - родная ф-ция
 
Сверху