Warning: get_class() called without object from outside a class in Hatası Çözüm

Hata Örneği

PHP
9 lines
<?php
class sinif{
public static function OrnekAl(){
return null;
}
}
class test extends sinif{}
echo get_class(test::OrnekAl());
?>
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

get_class ile bir sınıf ismi döndürmek istedik. Fakat dönen test::OrnekAl() sonucu bir fonksiyon içindeki null‘dü. Düzeltmek için aşağıdaki yöntemler kullanılabilir.

1.Ana ismi almak için fonksiyon sonucunu static sınıfa çevirmek

PHP
9 lines
<?php
class sinif{
public static function OrnekAl(){
return new static;
}
}
class test extends sinif{}
echo get_class(test::OrnekAl());
?>
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

2.Ana ismi almak için fonksiyon ismini kaldırmak

PHP
9 lines
<?php
class sinif{
public static function OrnekAl(){
return null;
}
}
class test extends sinif{}
echo get_class(new test);
?>
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

3.Alt ismi almak için sınıfı döndürmek

Markdown
9 lines
<?php
class sinif{
public static function OrnekAl(){
return new sinif;
}
}
class test extends sinif{}
echo get_class(test::OrnekAl());
?>
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

4.Alt ismi almak için direk sınıfı çağırmak

PHP
9 lines
<?php
class sinif{
public static function OrnekAl(){
return null;
}
}
class test extends sinif{}
echo get_class(new sinif);
?>
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

 

__call Fonksiyonu ile Parametre Tanımlayarak Veri Alışverişi Yapmak

Bu örnek yaygın olarak set ve get metodu olarak bilinen uygulamayı içermektedir.

PHP
22 lines
<?php
class Sinifim{
protected $ayarlar = [];
public function __call($fonksiyon, $parametreler = null){
if($fonksiyon == 'ver' && count($parametreler) == 2){
$anahtar = $parametreler[0];
$deger = $parametreler[1];
$this->ayarlar[$anahtar] = $deger;
}elseif($fonksiyon == 'al' && count($parametreler) == 1){
$anahtar = $parametreler[0];
if(array_key_exists($anahtar, $this->ayarlar)) return $this->ayarlar[$anahtar];
}else{
exit('Veri tanımlanmadı!');
}
}
}
$obje = new Sinifim;
$obje->ver('isim', 'Ulusan');
echo $obje->al('isim')."<br>";
$obje->ver('isim', 'Yazılım');
echo $obje->al('isim')."<br>";
?>
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Çıktısı

Markdown
2 lines
Ulusan
Yazılım
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

 

__call Fonksiyonu ile Olmayan Fonksiyonu ve Parametrelerini Almak

PHP
18 lines
<?php
class Sinifim{
public function deneme(){
echo "deneme fonksiyonu çağırıldı<br>";
}
public function __call($fonksiyonAdi, $parametreler = null){
echo "" . $fonksiyonAdi ." fonksiyonu " . count($parametreler) . " parametre ile çağırıldı!<br>";
echo "Bu parametreler ";
foreach($parametreler as $p){
echo $p." ";
}
echo "dir";
}
}
$obj = new Sinifim;
$obj->deneme();
$obj->benyokum('veri1','veri2');
?>
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Çıktısı

Markdown
3 lines
deneme fonksiyonu çağırıldı
benyokum fonksiyonu 2 parametre ile çağırıldı!
Bu parametreler veri1 veri2 dir
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX