Bir işlev bir dizi aramak için?

3 Cevap php

Küresel kapsamı, fonksiyonu dışında tanımlanmış bir işlevi bir değişken kullanmak için izin verir. örneğin

$a=1;
function $test(){
echo $a;
}

//outputs 1

ama neden ben bir dizi ile bir değişken tanımlarsanız Ben bunu aynı şekilde kullanamazsınız ki?

$test = array(
0=>'zero', 
1=>'one', 
2=>'two',
3=>'three', 
);

function doesntWork($something){
echo "My favorite number is " . $test[$something]; 
}

//outputs My favorite number is 0

Nasıl işlevinin kendisi içine dizi yazdırmam gerek kalmadan işlevi dizi geçirmek yok.

any explanation would be appreciated thanks

3 Cevap

komut # 1 doğru değildir. ne de (function $ test () {...}) çalışmak, ne de çıkış "1" yapar yapar. ve globallerinin kötü uygulama ARE. bir sınıfta onları sarma onunla ilgisi yok. classes are not a solution for random problems not related to object orientation.

sadece bir parametre olarak $ a pass:

<?php 
  $a=1; 
  function test($foo) { 
    echo 'number ' . $foo; 
  }; 

  test($a);
  // -> "number 1". 
 ?>

komut dosyası # 2:

<?php
  $test = array(
    0=>'zero', 
    1=>'one', 
    2=>'two',
    3=>'three', 
  );

  function doesntWork($test, $something){
    echo "My favorite number is " . $test[$something]; 
  }

  doesntWork($test, mt_rand(0,3));
?>

. İlk örnek çıkış 1, belirli bir fonksiyonun değişkenleri küresel yapmak için tek yol bu gibi küresel anahtar kelime kullanmak için gerekir:

function test() {
    global $a;
    echo $a;
}

function doesWork($something) {
    global $test;
    echo "My favorite number is " . $test[$something]; 
}

Burada daha fazla bilgi: http://ca2.php.net/manual/en/language.variables.scope.php

PHP örtülü küresel kapsam belirleme yok; Eğer "küresel" değişkenleri erişmek için global anahtar kelime kullanmanız gerekir.

$ A bağlı değişkenler PHP'nin şüpheli kullanımı bir karışıklık muhtemelen 1 çıktısı.