Php çıkış fonksiyonu soru

2 Cevap php

Ben mantıklı PHP bir davranış fark etmiş, ama bunun etrafında almak için nasıl emin değilim.

Ben uzun bir senaryo, böyle bir şey var

<?php 
 if ( file_exists("custom_version_of_this_file.php") ) {
  require_once "custom_version_of_this_file.php";
  exit;
 }
 // a bunch of code etc
 function x () {
  // does something
 }
?>

İlginçtir, fonksiyon x () çıkış ateş, bu nedenle Require_oncenin ÖNCE komut ile kayıt olacaklar () ve çıkış denir, ve; deyimi kaydetmesinin sayfasında fonksiyonları engellemez. Ben Require_oncenin () dosyası bir fonksiyon x () varsa, bu nedenle, komut kilitlenmesine.

Çünkü senaryo I (büyük olasılıkla neredeyse aynıdır ancak biraz farklı olacak, bunun yerine orijinal dosya varsa özel dosya kullanmak, olan) çalışıyorum, ben değil dosya (arama) orijinal işlevlere sahip istiyorum Onlar özel dosyasında bulunması, böylece kayıtlı olsun.

Herkes bunu nasıl biliyor?

Teşekkürler

2 Cevap

Sen function_exists işlevini kullanabilirsiniz. http://us.php.net/manual/en/function.function-exists.php

if (!function_exists("x")) {
    function x()
    {
        //function contents
    }
}

Bir sınıf içinde işlevleri kaydırmak ve özel sürümlerini eklemek için uzatabilirsiniz.

this_file.php

class DefaultScripts {
    function x () {
        echo "base x";
    }

    function y() {
        echo "base y";
    }
}

if(file_exists('custom_version_of_this_file.php'))
    require_once('custom_version_of_this_file.php');
else
    $scripts = new DefaultScripts();

custom_version_of_this_file.php

class CustomScripts extends DefaultScripts {
    function x () {
        echo "custom x";
    }
}

$scripts = new CustomScripts();

Results if file exists

$scripts->x(); // 'custom x'
$scripts->y(); // 'base y'

and if it doesn't

$scripts->x(); // 'base x'
$scripts->y(); // 'base y'