2013-04-12 2 views
3

Моего PHP код здеськак использовать PHP с иней файлами

<?php 
    function String($word){ 


      $lang = parse_ini_file("../pard_language/en/language.ini"); 

     $key = array_search($word, $lang); 
     if(isset($key)){ 
     echo $key; 

     } 
     } 


    echo String("PARD_INSTALL"); 
    ?> 

мой language.ini файл это

PARD_INSTALL = Install 
PARD_USER_AGGREMENT = User Aggrement 
PARD_AGREE = Agree 
PARD_HOST_NAME = Host Name 
PARD_DATA_BASE = Data Base 
PARD_DATA_BASE_USER = Data Base User 
PARD_DATA_BASE_USER_PASS_WORD = Data Base User Password 
PARD_CONNECT = Connect 
PARD_RESET = Reset 
PARD_ADMIN_USER_NAME = Admin User Name 
PARD_ADMIN_USER_PASS_WORD = Admin User Password 
PARD_LOGIN = Login 

Это мой выше код не working.I хочет сохранить INI-файл которые содержат язык, и нужно получить значение слова, используя вышеуказанную функцию php. Эти коды не дают никакого вывода. Помогите мне решить это?

+0

Выполнен какой-либо отладкой? does 'var_dump ($ lang)' показывать что-нибудь? Если это логическое значение false, то либо этот файл не читается, либо возникает ошибка синтаксического анализа. Ваш код также не делает ** RETURN ** ничего, поэтому бит 'echo String()' бессмыслен. –

+0

var_dump ($ lang) показать это красиво. Я имею в виду, что это work.but при использовании файла derecly это не работает. Есть ли какие-то ошибки? – dilini

+0

Я использовал его как массив, но он не работает, см. DEMO http://codepad.org/83EajTdC – dilini

ответ

4

Вы ищете значения, не получая ключ, parse_ini_file будет возвращать массив всех элементов, так и с $lang[$word] вы должны получить значение, которые вы хотите ...

function String($word) { 
    $lang = parse_ini_file("../pard_language/en/language.ini"); 
    return isset($lang[$word]) ? $lang[$word] : null ; 
} 

Теперь это все еще BAD Approach почему?

  • Вы должны вызвать parse_ini_file каждый раз, когда вы хотите, который загружает файлы каждый раз, когда
  • String плохое имя для функции
  • echo вызывалась дважды .. 1. В функции и за ее пределами функция InstEd использования return

Вот что я хотел бы использовать:

$ini = new ArrayINI("../pard_language/en/language.ini"); 
echo $ini("PARD_INSTALL"); 
// or 
echo $ini['PARD_INSTALL']; 

Поскольку я также расширил IteratorAggregate я могу цикл все значения

foreach ($ini as $k => $value) { 
    var_dump($k . " = " . $value); 
} 

Класс Б

class ArrayINI implements ArrayAccess, IteratorAggregate { 
    private $lang; 

    public function __construct($ini) { 
     $this->lang = parse_ini_file($ini); 
    } 

    function __invoke($offset) { 
     return $this->offsetGet($offset); 
    } 

    public function getIterator() { 
     return new ArrayIterator($this->lang); 
    } 

    public function offsetSet($offset, $value) { 
     if (is_null($offset)) { 
      $this->lang[] = $value; 
     } else { 
      $this->lang[$offset] = $value; 
     } 
    } 

    public function offsetExists($offset) { 
     return isset($this->lang[$offset]); 
    } 

    public function offsetUnset($offset) { 
     unset($this->lang[$offset]); 
    } 

    public function offsetGet($offset) { 
     return isset($this->lang[$offset]) ? $this->lang[$offset] : null; 
    } 
} 
+0

Ударьте меня к удару. Просто хочу добавить, что 'string' - это имя типа и плохой выбор для имени функции. Также я заменил бы «null» return чем-то вроде 'sprintf (« [Unkown lang entry:% s] », $ word)' или просто '$ word'. – Sammitch

+0

@ Sammitch, что было временным ответом :) – Baba

+0

Было ли это когда-либо ... @ _ @ – Sammitch

1

попробовать

$lang = parse_ini_file("../pard_language/en/language.ini"); 
print_r($lang); 
+0

Что это за ответ? – dilini

0

Я предлагаю вам создать статический класс, так что вы не должны повторной обработки один и тот же файл INI для каждого отдельного ключа, который вы хотите:

class iniParser { 
    private static $parsedFile = null; 
    public static function String($word) { 
     if (self::$parsedFile === null) { 
      self::$parsedFile = parse_ini_file("../pard_language/en/language.ini"); 
     } 
     if (isset(self::$parsedFile[$word])) { 
      return self::$parsedFile[$word]; 
     } 
     return null; 
    } 
} 
echo iniParser::String("PARD_INSTALL"); 
Смежные вопросы