php oop değişken kapsamı

3 Cevap php

Yani onun kurucusuna ben mysqli uzantısı ile benim veritabanına beni bağlar kodu dahil .. bir sınıf var:

class MyClass
{
    public function __construct()
    {
        include("dbconnect");
    }
}

dbconnect bu gibi görünüyor:

$host = "localhost";
$user = "user";
$pass = "123";
$database = "myDatabase";

$mysqli = new mysqli($host, $user, $pass, $database);
$mysqli->set_charset('utf8-bin');

Şimdi benim sorunum: mysqli cepten-Style kullanılabilir beri, nasıl Sınıfım içinde değişkene erişim alabilirim?

function doIt()
{    
    $query = "SELECT * FROM myTable";    
    $result = $mysqli->multi_query($query);
}

Bu işlevine bir çağrı sonuçları

Notice: Undefined variable: mysqli in ... on line ... Fatal error: Call to a member function multi_query() on a non-object in ... on line ...

Yani değişkenin kapsamı doğru değil gibi görünüyor. Herkes bu nasıl düzeltmek için biliyor mu? Sınıfım ekstra bir başvuru ya da MySQLi şey lazım olmaz, ben ayrılmış tutmak istiyorum, çünkü iyi olurdu.

3 Cevap

$mysqli değişkeni yapıcı kapsam içinde kullanılabilir. Böylece gibi kurucu değiştirin:

class MyClass
{
    public function __construct()
    {
        include("dbconnect");
        $this->mysqli = $mysqli;
    }
}

Şimdi o nesnenin diğer yöntemleri $this->mysqli kullanabilirsiniz.

Değişkeni bir işlev içinde başka herhangi bir değişkeni olarak aynı kapsamı vardır: fonksiyon içinde geçerlidir. En kısa sürede işlev döner gibi, gitti. Eğer sınıftaki diğer fonksiyonu için bir değişken "devam" etmek istiyorsanız, bir sınıf üyesi olun:

class MyClass {
    var $member = null;

    function foo() {
        $localVar = $this->member;
        $this->anotherMember = 'bar';  // $anotherMember is now available for other functions
    }
}

Size değişkenlerin nasıl kullanılacağı üzerinde herhangi bir kontrol vermez çünkü tam bir include aracılığıyla kodu yeniden iyi değil. I returns DB kolu sonra, DB bağlantı kurar işlev yapma gibi bir şey yeniden düşünmek istiyorum.

Ne aradığınız "küresel" anahtar kelimedir. Genel olarak, olsa, ben küresellerle önlemek ve tasarım yeniden düşünmek istiyorum.