PHP - dönüş () include () 'dosyası d çağrıldı olmadığını nasıl kontrol edebilirim?

6 Cevap php

Return () dahil edilen dosyada çağrıldı olmadığını nasıl anlarım. Sorun dönüş () denilen olmasa bile () döndürüyor 'int 1', dahil olmasıdır. İşte bir örnek ...

included_file_1.php

<?php

return 1;

included_file_2.php

<?php

echo 'no return here, meep';

main.php

<?php

$ret = include('included_file_1.php');

// This file DID return a value, int 1, but include() returns this value even if return() wasn't called in the included file.
if ($ret === 1)
{
    echo 'file did not return anything';
}

var_dump($ret);

$ret = include('included_file_2.php');

// The included file DID NOT return a value, but include() returns 'int 1'
if ($ret === 1)
{
    echo 'file did not return anything';
}

var_dump($ret);

Edit:, geçici bir çözüm olarak, include () dan çıkış yakalamak ediyorum (echo / print tablolardan). Herhangi bir çıkış üretildi, ben include () dan dönüş değeri görmezden.

Güzel, ama benim web app / çerçevede gerek işlevsellik sağlar değil.

6 Cevap

İyi bir soru. manual olarak örneklere bakarak, ben yapamam sanırım.

Akla gelen en iyi çözüm fikir tüm projenize dahil çıplak değerleri döndürmek değil yapmaktır, ancak dönüş değeri içeren bir dizi (return array(1);).

Akla gelen her şey (en azından benim) bir içerme ya da değil ister bayrağa bazı sabitler veya değişkenler tanımlamayı kapsar. Zarif bir şey.

Bu davranış tasarım yüzündendir - başarılı (ya da değeri return 'dahil dosyası tarafından ed) betik çalıştırma devam edebilirsiniz gibi, olduğu eklediğinizde include deyim 1 dönse bile bir { [(0)]} başarısız olur ve bir programcı olabilir bu durumda ne için kontrol edin.

Manuel:

[the return value] is 1 because the include was successful. Notice the difference between the above examples. The first uses return() within the included file while the other does not. If the file can't be included, FALSE is returned and E_WARNING is issued.

Bu durumda, sadece, yani bu dönüş değeri etkin PHP include deyimi tarafından kullanılmak üzere ayrılmış, bir dosya için bir dönüş değeri olarak kodunuzu 1 kullanmayın.

Muhtemelen debug_backtrace() faydalanmak olabilir, ama gerçekten ideal bir çözüm değil. Bu yavaş ve istediğin sonuçları elde etmek için bir sürü iş yapmak gerekiyor.

Ne yazık ki, include ve return arasında düzenli kullanım dışına düşüyorsa tanımlamak durum. Ben sadece onunla çalışmak için mantığı değiştirmek olacaktır. Neden dosyaları değil genellikle sadece return 2 diyoruz sonunda return aramıyorsun? Bu şekilde hala normal bir karşılaştırma true değerlendiren bir değer alacağı, ancak diğer return 1 çağrıları arasında bir ayrım olarak kullanabilirsiniz.

Dahil dosyaya dönmek için bir şey varsa, o işlev varsayılan olarak 1 döndürür içerir. Aksi takdirde dahil dosyası tarafından gönderilen ne olursa olsun geri dönecektir. Echo ve baskı tablolar bir dönüş değil, PHP tarafından belirlenen 'iade' ifadesi olmak zorundadır. Her şey normal işlenecektir. Bu kod temelde 'dosya düzgün yürütmek mi?' Diyor ve 'evet yaptım.', 1 dönen ediyor

PHP: include - Manual - Doğru güvenlik uyarı mesajları aşağıda "Handling Returns" bir göz atın ve daha sonra Örnek 5 bakmak ve hemen altında metin. Bu mükemmel tüm açıklar.

$ Ret = include ('...'); Dosya varsa her zaman 1 dönecektir.

Bir değişken oluşturarak deneyin ve ayarlanmış olup olmadığını kontrol edin.

include_file_1.php

<?php
$includeFile1 = true;

main.php

<?php
include('included_file_1.php');

if (isset($includeFile1) == true) 
{
    echo "It was included";
}

Için gerekli ve asla yapabildin biliyordum, ama ben her yer yazısının sonunda bu kullanabilirsiniz asla:

return __FILE__; 

veya:

return basename(__FILE__);

Bunu özgüllük ihtiyacınız yoksa daha önce önerilen veya, 2 kullanın.