v2.5.2
Giriş yap

sınıf içinde extends edilmiş sınıfın fonksiyonuna değer atama

hasaneryilmaz
567 defa görüntülendi

define("HOST", $host);
define("DBNAME", $dbname);
define("UNAME", $dbuser);
define("PASSWD", $dbpass);
define("CHARSET", $dbcharset);

class HasDB extends PDO
{
    public function __construct()
    {
        try {
            parent::__construct("mysql:host=" . HOST . ";dbname=" . DBNAME, UNAME, PASSWD);
            $this->query('SET CHARACTER SET ' . CHARSET);
            $this->query('SET NAMES ' . CHARSET);
            $this->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            $this->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
        } catch (PDOException $error) {
            $error->getMessage();
        }
    }

}

bu şekilde bir sınıf tanımladım.

kullanırken


$vt = new HasDB();

$vt->query("SELECT * FROM tabloadi")->fetch(PDO::FETCH_ASSOC);

şeklinde kullanıyorum diyelim sondaki fetch(PDO::FETCH_ASSOC) fonksiyonuna ben
result(); yazdığımda erişmek istiyorum.

yani



$vt = new HasDB();


//bunun yerine
$vt->query("SELECT * FROM tabloadi")->fetch(PDO::FETCH_ASSOC);

//böyle kullanmak istiyorum


$vt->query("SELECT * FROM tabloadi")->result();


bunu nasıl yapabilirim.?

sınıfın içine


public function result()
{
    return $this->fetch(PDO::FETCH_ASSOC);
}

şeklinde yaptım hata aldım.

Cevap yaz
Cevaplar (4)
makifgokce
1289 gün önce

buradaki işine yarayacaktır.

hasaneryilmaz
1289 gün önce

cevaplarınızı denedim lakin

"" Fatal error: Uncaught Error: Call to undefined method BaskaSinif::fetch() "" şeklinde bir hata alıyorum


<?php

class BaskaSinif extends HasDB 
{
    public function __construct()
    {
        parent::__construct();
    }

    public function getir()
    {
        return $this->query("SELECT * FROM tabloadi")->result();
    }


}

pdo sınıfını hasdb sınıfına hasdb sınıfınıda başkabir sınıfa bağlayıp result() değişkenine ulaşmaya çalışınca hata alıyorum.

tayfunerbilen
1289 gün önce

geriye $this return edip chain işlemini yapman gerekiyor. şöyle dener misin.

<?php

class HasDB extends PDO
{
    
    public $sql = '';
    
    public function __construct()
    {
        try {
            parent::__construct("mysql:host=" . HOST . ";dbname=" . DBNAME, UNAME, PASSWD);
            $this->query('SET CHARACTER SET ' . CHARSET);
            $this->query('SET NAMES ' . CHARSET);
            $this->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            $this->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
        } catch (PDOException $error) {
            $error->getMessage();
        }
    }
    
    public function query($query){
        $this->sql = $query;
        return $this;
    }
    
    public function result(){
        return $this->query($this->sql)->fetch(PDO::FETCH_ASSOC)
    }

}
makifgokce
1289 gün önce

bu şekilde dene.


public function result()
{
    return parent::fetch(PDO::FETCH_ASSOC);
}
// veya 
public function result()
{
    return self::fetch(PDO::FETCH_ASSOC);
}