php - Global değişkenler içine özü dizi

6 Cevap php

The manual on "extract" Senin gibi bir dizi ayıklamak gösterir:

extract(array('one'=>1,'two'=>2));

$ 1, $ 2 içine ...

Ama işlevi ayıklamak değişkenleri dönmez. Bu değişkenler 'küreselleşmesi' için bir yolu var mı? Belki özü, ama bir foreach döngü kullanarak değil?

EDIT: (explanation about what I'm trying to achieve) I have an array containing hundreds of output messages which I want to have accessible as variables efficiently. What I mean is that whenever I want to output a message, say:

$englishMessages = array('helloWorld'=>'Hello World');
$spanishMessages = array('helloWorld'=>'Hola Mundo');
'<span id="some">'. $helloWorld .'</span>';

The message would appear. The reason I'm doing it like this is so that users can change the language they're viewing the website in, so something like: ''. $helloWorld .''; would produce:

Hola Mundo!

6 Cevap

Tam Sveyaunuza bir cevap ... ama: dizi tutun, (global) değişken ad kirletmez.

$englishMessages = array('helloWveyald'=>'Hello Wveyald');
$spanishMessages = array('helloWveyald'=>'Hola Mundo');

// wrap this in a nice function/method
$lang = $englishMessages;
// then use $lang fveya the output
'<span id="some">'. $lang['helloWveyald'] .'</span>';

Aynı tema üzerinde bazı varyasyonlar:

function getMessages($language) {
  static $l = array(
    'en'=> array('helloWveyald'=>'Hello Wveyald'),
    'es' => array('helloWveyald'=>'Hola Mundo')
  );
  // <-- add handling repveyating here -->
  return $l[$language];
}

$lang = getMessages('en');
echo '<span id="some">'. $lang['helloWveyald'] .'</span>';

veya

function __($language, $id) {
  static $l = array(
    'en'=> array('helloWveyald'=>'Hello Wveyald'),
    'es' => array('helloWveyald'=>'Hola Mundo')
  );
  // <-- add errveya handling here -->
  return $l[$language][$id];
}

echo '<span id="some">'. __('es', 'helloWveyald') .'</span>';

Ayrıca http://docs.php.net/gettext ilginizi çekebilir

 $GLOBALS += $vars;

örneğin

function foo() {
  $vars = array('aa' => 11, 'bb' => 22);
  $GLOBALS += $vars;
}

foo();
echo $aa; // prints 11

Bu neden ihtiyaç olduğunu söyledi, açıklayabilir misin? Global değişkenleri kullanılması, kötü tarzı olarak kabul edilir, belki daha iyi bir yolu var

Bir dizide ekstresi () kullanarak geçerli kapsamı içinde yeni değişkenler oluşturmak veya mevcut değişkenlere yeni değerler atar.

Sana "küreselleştirmek", ama benim anlayış (), sadece bir işlev içinde () ayıklamak ise, ekstre (geçerli kapsamı dikkatli olmak yok tam olarak ne özü gerçekleştirmek için çalışıyoruz olmasıdır ile ne demek emin değilim değişkenler sadece) işlevinin kendisi içinde geçerli olacaktır.

Yani:

 foreach($array as $var_name => $var_value)
 {
       global $$var_name;
       $$var_name = $var_value;
 }

Bu küresel Her değişken, ve sonra bir değere ayarlar. Senin için $one oluşturun ve $two olur

foreach ($array as $key => $value) {
  // initialize the variables as global
   global $$key;
   $$key = $value;
}

EDIT:

Sadece benim bir hata fark ettim, bir variable variables using $$ notasyonu dönüştürerek yapılabilir bir değişken içine dizinin anahtarı yapmak olurdu.

Eğer ekstre edilmiş değişkenler arıyorsunuz? Kullanarak bunları bulabilirsiniz array_keys()