Nasıl bir PHP sınıfı başlatmak ve birkaç dosya kullanabilirsiniz?

3 Cevap php

Şu anda stumped. Bu soru hakkında benim son yazılan cevap bir nesne sadece 1 kez başlatılır emin olmak için bir Singleton kullanmak için ama ben tam tersi sorun yaşıyorum.

I index.php adında bir dosya var ve ben bunun içine bu dosyaları eklerseniz, class1.php, class2.php, class3.php, {[(4 )]}.

index.php Ben olacak In

<?PHP
$session = new Session();  

require_once '/includes/class1php';
require_once '/includes/class2.php';
require_once '/includes/class3.php';
require_once '/includes/class4.php';
?>

ardından test tüm dosyaları 4 I get() çağrıldığında bir yöntem erişmeye çalışacaktır session class, oturum sınıf dosyası zaten de index.php sayfasında dahil olduğunu varsayalım.

Şimdi kullanmaya çalışırsanız ...

$testvar = $session->get($var1);

test sınıf dosyaları herhangi ben bu hatayı alırsınız

Fatal error: Call to a member function get() on a non-object

Ben kullanırsanız kod bir hata olmadan çalışan tek yoldur

$session = new Session();

Her dosyada.

How can I fix/avoid having to initaite the class in every file when it is already initated in the index.php file?

amaç beni index.php gibi 1 dosyada bir sınıf başlatmak ve o sayfanın içine sınıf dosyaları eklemek izin, yakalamak sınıfların en çok ben başlatmak zorunda olmasaydı çok güzel olurdu diğer sınıflardan yöntemleri kullanmak olduğunu her dosyanın her sınıf

3 Cevap

Kodu görmeden söylemek zor, ama ben bazı varsayımlar yapmak düşünüyorum. Yanılıyorsam beni düzeltin:

EDIT: Yani bu yüzden sepculating durdurabilirsiniz kaynak yayınlayın

1) Eğer dahil dosyalar sınıf dosyaları vardır. diğer bir deyişle, bu gibi bir şey içerir:

class a
{
    function a(){}

    function b()
    {

    }
}

2) Eğer örneklendirerek yük zaman, sınıf dosyalarında kod yürütmeye çalışıyor, fakat daha sonraki bir zamanda değil

yani

require("class.a.php");

$myA = new a();

$a->b();

Eğer bu sınıflar içinde sizin oturum değişkeni referans çalışıyorsanız, o zaman bir kapsam sorunu var. Bu sınıf içinde bir global var olarak bildirilmiş olmadıkça bir sınıf tanımının dışında bildirilen bir değişken, sınıf içinde kullanılamaz.

class a
{
    function a(){}

    function willFail()
    {
        $session->doSomething(); //fails
    }    

    function b()
    {
        global $session;
        $session->doSomething(); //succeeds
    }
}

Hatta daha sonra, muhtemelen bunu istemiyorum, ama sınıf erişime ihtiyacı varsa yerine bir değişken olarak oturumunda geçmek gerekir:

class a
{
    function a(){}

    function b($session)
    {
        $session->doSomething(); // yay!
    }
}

Onların tüm uzanan bir taban sınıf olabilir

Örnek

class test1 extends Base {

    public function doSomething() {
        $this->session->get('something'); 
    }    

}

class Base {

    protected session;

    public function __construct() {
        $this->session = new Session();
    }

}

Sen geriye tür düşünmeye ediyoruz. Oturum nesnesini kullanmak herhangi bir dosya, o sınıf tanımını içeren dosyayı dahil etmek gerekir. Alternatif olarak sınıf çekmek için __ autoload kullanmaktır:

function __autoload($classname)
{
  if ($classname == 'Session')
  {
    include_once 'Session.php';
  }
}

EDIT: Eğer onu kullanacak her dosyanın içine autoload içeren dosyayı koymak gerekir.