Bir işlev içinde nasıl kullanılacağı içerir?

2 Cevap php

Ben sadece gerekli olduğu zaman yüklemek isterseniz büyük bir işlevi var. Yani gitmek için yol içerir kullanarak varsayalım. Ama çeşitli destek fonksiyonları () go_do_it yanı sadece kullanılan gerekir.

Onlar dahil dosyasında iseniz ben bir Redeclare hatası alıyorum. Bakınız Örnek A

Ben bir include_once de destek fonksiyonları koyarsanız gayet iyi çalışıyor, örnek B. bakınız

Ben func_1 kodu include_onceyi kullanırsanız, ikinci çağrı başarısız olur.

Ben include_once ikinci çağrı başarısız işlevini neden neden olarak kafam karıştı, bu kodu ikinci kez 'görmek' değil gibi görünüyor ama iç içe geçmiş fonksiyonlar varsa, bunları görmek 'gelmez.

Örnek A:

<?php
/*  main.php    */
go_do_it();
go_do_it();
function go_do_it(){
    include 'func_1.php';
}
?>

<?php
/*  func_1.php  */
echo '<br>Doing it';
nested_func()

function nested_func(){
    echo ' in nest';
}
?>

Örnek B:

<?php
/*  main.php    */
go_do_it();
go_do_it();
function go_do_it(){
    include_once 'func_2.php';
    include 'func_1.php';
}
?>

<?php
/*  func_1.php  */
echo '<br> - doing it';
nested_func();
?>

<?php
/*  func_2.php  */
function nested_func(){
    echo ' in nest';
}
?>

2 Cevap

Bir işlev içinde include() kullanarak sorun:

include 'file1.php';

function include2() {
  include 'file2.php';
}

file1.php küresel kapsama sahip olacaktır. file2.php 'in kapsamı işlevine yerel include2.

Şimdi tüm fonksiyonları küresel kapsamı olan ancak değişkenler değildir. Ben bu include_once uğraşamamz şaşırmadım. Eğer gerçekten bu şekilde-ve gitmek istiyorsan dürüst Yapmam-eski bir C / C + + önişlemci hile ödünç gerekebilir:

if (!defined(FILE1_PHP)) {
  define(FILE1_PHP, true);

  // code here
}

Eğer (bu arada opcode önbellek sorunları olabilir) tembel yükleme şekilde gitmek istiyorsanız bunun yerine autoloading kullanın.

Ben sadece gerekli olduğu zaman yüklemek isterseniz büyük bir işlevi var. Yani gitmek için yol içerir kullanarak varsayalım.

Baz varsayım yanlıştır. Optimizasyonu Bu tür karşı-üretken; Lütfen fonksiyon çizgileri yüzlerce bile uzun PHP'nin çözümleyici bunu gizleme hiçbir fark yararı olacaktır. Bir dosyayı ayrıştırmak için PHP için maliyeti ihmalkar olduğunu; Gerçek noticeable hız artışı daha iyi algoritmalar bulma veya veritabanına konuşmak için daha iyi yollar geliyor.

O dedi, sen dahil dosyasında işlev tanımı dahil edilmelidir. Aksine içine fonksiyonun gövdesini hareket daha func_1.php, dosyaya entire işlevi taşımak. Sen daha require_once İhtiyacınız her dosyanın içindeki fonksiyonunu içeren dosya, ve tam olarak bir kere ne olursa olsun bunu eklemek girişimi kaç kez dahil olduğundan emin olabilirsiniz.

Örnek:

file1.php

function test() {

}

index.php

require_once('file1.php');

include('table_of_contents.php');
test();