PHP Require_oncenin kapsamı nedir?

3 Cevap php

Basit bir soru: kapsamı require_once, küresel mi?

Örneğin:

<?PHP

require_once('baz.php');

// do some stuff
foo ($bar);

function foo($bar) {
    require_once('baz.php');
    // do different stuff
}

?>

Foo çağrıldığında, does it re-parse baz.php? Ya da ana php dosyasından zaten gerekli dosya itimat yok (aynı iki kez arka arkaya require_oncenin arayarak tuvale benzeyen dosya dahil)?

Ben daha önce bu konuyu gördüm, ama oldukça soruya cevap vermedi:

http://stackoverflow.com/questions/1669707/should-require-once-some-file-php-appear-anywhere-but-the-top-of-the-file

Yardımlarınız için teşekkürler!

3 Cevap

require_once() temelde dahil oldu olup olmadığını belirlemek için fiziksel dosyanın dayanır. Bu yüzden bu fiziksel dosya önce gerekli olup olmadığını ya da değil, çok teşekkür require_once() içinde aradığınız içerik değil.

Yukarıdaki kodda, sizin foo() function olmaz yeniden ayrıştırma baz.php, daha önce üst dahil olarak aynı dosya olacak beri.

Ancak, require_once() başarılı yaptığında kapsam geçerli olacak şekilde, foo() sen içine dahil edip bağlı olarak farklı sonuçlar elde, ya da en başında yer olacaktır.

It does not. require_once's tracking applies to inside functions. However, the following scripts produce an error:

a.php

<?php
require_once('b.php');
function f() { require_once('b.php'); echo "inside function f;"; }
?>

b.php

<?php
f();
?>

function f () önceden tanımlı değil çünkü b.php.

Zaten dahil edilebilir çünkü daha özel olarak sizin sorunuzu yanıtlamak için, o dosya üzerinde require_oncenin çağrı ikinci kez, o, hiçbir şey yapmayacağım.

Sizin ona işlevleri vardır vs eklerseniz, o zaman zaten bir işlev içine dahil sorunları olurdu, bu nedenle kapsam alakasız. Tanımlanmış ya da işleniyor sadece değişkenler ise bunu tekrar dahil edilmesini istiyorsanız, o zaman sadece böylece kapsam değişkenleri yeniden tanımlayarak, bunun yerine require_once ve require kullanabilirsiniz.