php yöntem içinde sınıfının çağrı gerektirir

6 Cevap php

benim anlayış, arama php dosyasına yapıştırır kod gerektirir.

Eğer bir yöntem içindeki gerektiren olsaydı ... bu yöntemde sonraki deyimi engelleme yöntemi içinde tüm kod / sınıf yapıştırın ne.

örn.

  function test() {

    require 'pathtosomeclasscode';
    somestatement; // any code after the require is blocked.

 }

nasıl ben o kesin noktada yapıştırılan olmadan, şimdiye kadar nereye kodu gerektirecek edebilmek için, bu çevrede alabilirim?

6 Cevap

Biraz şaşırtıcı, bu sadece iyi çalışması için görünür. Dahil kod Baz :: bork () kapsamı içinde yürütmek - ama kod sadece bir sınıf tanımlar ve sınıflar geneldir. Yani tanımlanmış bir sınıf ile sonuna kadar.

Dosya: foo.php:

<?PHP
class Foo{
      function bar(){
               echo "Hello from Foo::bar()!\n";
      }
}

Dosya: Baz.php:

<?PHP
class Baz{

      function bork(){
               require_once "Foo.php";
               $f = new Foo();
           $f->bar();
      }
}

echo "testing internal definition:\n";
$b = new Baz();
$b->bork();

echo "\ntesting in global scope:\n";

$f = new Foo();
$f->bar();
echo "\nall done\n";

Çıktı:

$ php Baz.php
testing internal definition:
Hello from Foo::bar()!

testing in global scope:
Hello from Foo::bar()!

all done

Şimdi, şeyleri bu şekilde yapmak istediğiniz birçok yerde düşünemiyorum. İnsanlar genellikle sınıf tanımı dışında, kendi sınıf dosyasının üstündeki () olası bağımlılıkları Require_once.

require, require_once, include veya include_once will not sizin fonksiyonu içinde kod yürütme {[(durdurmak çağırıyor 5)]}. Dahil edilen dosyada kod var ne başka yerine, aynı scope (tanımlanmış fonksiyonlar ve küresel varlık sınıfları ile) fonksiyonu olarak, bunun içine değil yürütülür.

Script'lerinizde hata (yani bir bir sınıfı yeniden tanımlanmasını girişimi veya adlandırma bir çatışma ile yapmak için ise bu çözümleri sizin için çalışabilir - Diğer cevaplar bir çözüm olarak require alternatifleri birini kullanmanızı öneririz fonksiyonu), aksi takdirde sen bize biz size gerçek nedenini çözmeye yardımcı olabilir, böylece bir sorun olduğunu düşünüyorum yapmak için (ya da oluştu değil) oluştu ne daha fazla bilgi vermek isteyebilirsiniz.

Bir başka kayda göre, bu dosya dahil yöntemleri komut içine paste kod yok. Pasting insanlar metni korumak için kullanabileceğiniz bir araçtır. Ben denemek ve bu fonksiyonların nasıl anlayış ilerletmek için PHP kitabını okumanızı öneririm:

Bunları içine baktıktan sonra onların çalışma üzerinde daha fazla sorunuz var ise tekrar yayınlayacağız.

require_oncenin deneyin? Sadece senin başka bir yere dahil örtmek.

Eğer include_onceyi ('script.php') kullanın Eğer sınıflar redeclared ilgili hataları içine yayınlanmaz.

Ben şu kendimi hiç denemedim, ama yedekli () include_onceyi etmek istemiyorsanız ben bu kurulum Düşünüyorum da işe yarayabilir:

class Whatever {

    protected $classObject;
    public function __construct( /*...*/ ) {
        include('anotherClass.php');
        $this->classObject = new anotherClass();
    }

    public function someFunction( /*...*/ ) {
        $this->classObject->classObjectFunction();
    }

    public function anotherFunction( /*...*/ ) {
        $this->classObject->classObjectFunction();
    }
}

Sonra her aynı paylaşılan sınıf nesnesi bir işlevi çağırır aşağıdaki kodu diyebiliriz:

$Whatever = new Whatever();
$Whatever->someFunction();
$Whatever->anotherFunction();

Ben ne söylüyorsun sen kod hemen yürütmek istemiyorum olduğunu düşünüyorum. Bu correcty ise, birkaç seçeneğiniz vardır:

  1. Sen gerektiren taşıyabilirsiniz.

  2. Ayrıca) (fopen kullanarak dosyayı okuyabilir, daha sonra ayrıştırmak. (Bu HTML anlamak olmaz çünkü eval çağrı yapamazsınız, ancak bir çözümleyici ile yapabilirsiniz)

Ben gördüğünüz gibi, ben düzeltmek am, yükleme sınıflar için harici dosyaları kullanıyorsun? Neden kullanmayın Autoloading Classes. Ben farklı durumlarda farklı sınıf organları yüklemek istediğinizde o iş olmaz biliyorum, ama bu iyi bir uygulama olmadığını ben gerçekten bilmiyorum.