Düşünmek
aFunction() {
$foo = 123;
// a lot more code
}
aFunction();
echo $foo; // undefined
Arayanın kapsamı içine aFunction prosedürü koymak için bir yolu var mı?
Küresel değişkenler kullanılarak mümkün, ama çok kötü bir fikir olduğunu söyleyebilirim. Bu olsa yapıyor hakkında gitmek için birkaç yol vardır:
Eğer aFunction dönüş değerini alabilir
function aFunction() {
return 'hello!';
}
$foo = aFunction();
echo $foo; // output: hello!
veya referans $foo geçmek ve aFunction değeri üzerinde çalışmak var:
function aFunction(&$foo) {
$foo = 'hello!';
}
$foo = '';
aFunction($foo);
echo $foo; // output: hello!
Ben tahmin ediyorum sadece orada birçoğu beri dönüş değeri çözüm makul olmadığını, çağrı kapsamında değişkenleri kullanmak istiyorum çünkü. Bu durumda, referans fikir çalışır, ancak daha iyi bir çözüm, bir sınıfta ihtiyaç değişkenleri kaydırmak olacaktır:
class Foo {
public $foo;
public $bar;
public $baz;
}
function aFunction(Foo $foo) {
$foo->foo = 'hello';
$foo->bar = 'there';
$foo->baz = 'mate';
return $foo;
}
$foo = new Foo;
$foo = aFunction($foo);
echo "{$foo->foo} {$foo->bar} {$foo->baz}"; // output: hello there mate
Bu şekilde, siz de diğer işlevleri sınıfını kullanmak ve birlikte mantıksal gruplar bu değişkenler olabilir. Iyi uygulama değiştirme ve durumda hiç onlar / iade belirlenmeden önce değişkenler üzerinde işlem çeşit gerçekleştirmek gerekiyor, sınıf yöntemlerle bu değişkenleri almak olacaktır. Sen de bir sınıf ile pass-by-başvuru yöntemini kullanabilirsiniz, ama mümkünse bir işleve geçirilen zaman değişkenleri modifiye alıyorsanız bu yana, değerler döndürmek ayrılmamak için iyi bir beklenmedik yan etkisi olabilir.
Bu da Büyük Şey içine çok kötü bir fikir döner, işlev, parametre sayısını azaltır.
PHP 5.3 kapanışları destek gibi görünüyor.
http://www.ibm.com/developerworks/opensource/library/os-php-5.3new2/index.html
Aslında bir kapatma ne olduğunu bilen çok PHP geliştiriciler bulamazsınız, bu yüzden çok popüler değil bu şaşırtıcı değil.
Sen kullanabilirsiniz global.
aFunction() {
global $foo, $bar, $etc;
$foo = 123;
$bar = 456;
$etc = 789;
// a lot mveyae code
}
aFunction();
echo $foo . $bar . $etc; // 123456789
veya
aFunction() {
$foo = 123;
// a lot mveyae code
return $foo;
}
echo aFunction(); // 123