Veritabanından Gelen Değerleri Class içinde Basmak
Merhaba Arkadaşlar,
Aşağıdaki şekilde statik bir bir class ile doğum günü gelen kişilerin bir listesini basıyorum.
class Birthday {
private $birthDays;
public $today;
public $notifications;
public function __construct() {
global $DogumGunuListesi;
$this->today = new DateTime('today');
$this->birthDays = [
//echo $DogumGunuListesi;
'Ali' => '17-09-1997',
'Veli' => '11-09-1993',
'Zeki' => '15-09-1991'
];
$this->notifications = [];
}
public function birthReminder() {
foreach ($this->birthDays as $name => $birthDay) {
$birthDate = new DateTime($birthDay);
if($this->compareDay($birthDate) && $this->compareMonth($birthDate)) {
array_push($this->notifications, [
"age" => $birthDate->diff($this->today)->y,
"name" => $name,
"dob" => $birthDay
]);
}
}
}
protected function compareDay($birthDate) {
return $birthDate->format('d') == $this->today->format('d');
}
protected function compareMonth($birthDate) {
return $birthDate->format('m') == $this->today->format('m');
}
}
$person = new Birthday();
$person->birthReminder();
Aşağıdaki bilgileri mediumtext olarak veritabanında tutuyorum.
'Ali' => '17-09-1997',
'Veli' => '11-09-1993',
'Zeki' => '15-09-1991'
Bununla birlikte veritabanından çekip class'a basarak kullanamıyorum.
Veritabanından çektiğim ve $DogumGunuListesi değişkenine eşitlediğim bilgileri basmak için global $DogumGunuListesi; tanımı yaptım, olmadı.
Sorguyu class'ın içinde yaptım yine olmadı.
Nerede hata yaptığımı bir türlü bulamadım. Yardımcı olabilirseniz memnun olurum.
Şimdilik manuel olarak listeyi koda yapıştırarak çalıştırabiliyorum.
Teşekkürler.
Soru hatalı mı? 👎
Eğer sorunun kurallara aykırı olduğunu düşünüyorsanız lütfen bize bildirin!
Cevaplar (5)
Sorgu ile gelen dizi görünümlü metni diziye çeviremedim bununla birlikte kodu aşağıdaki şekle getirip çözdüm.
/* Doğumgünü Listesi */
$DogumGunuListesi = db'den gelen sonuç;
$veri = str_replace(" ","",$DogumGunuListesi);
$veri = str_replace("'","",$veri);
$parcala = explode(",", $veri);
foreach ($parcala as $values) {
if(trim($values)!="") {
$tarih = date(d).".".date(m);
$konum = strpos($values, $tarih);
if ($konum === false) {
} else {
$parcala2[] = explode("=>", trim($values));
}
}
}
foreach ($parcala2 as $ekranbas) {
$myBirthdayList .= "<li>".$ekranbas[0]."</li>";
}
if($myBirthdayList=="") {
$myBirthdayList = "<li><b>[%LNG|dogumgunuyok%]</b></li>";
}
$myBirthdayList = "<ul class='myBirthdayList'>".$myBirthdayList."</ul>";
/* Doğumgünü Listesi */
Emeği geçen hepinize teşekkürler.
Tek bir sorun kaldı. $DogumGunuListesi aslında dizi değil.
Sorumda da belirttiğim gibi bilgileri mediumtext olarak veritabanında tutuyorum.
Sorumu yazarken bahsettim bununla birlikte çok yüzeysel kalmış olabilir.
Bu ekran alıntısındaki gibi array görünümlü bir metin aslında. Bunu diziye çevirmeliyim.
Sanırım parçalayıp tekrar dizi olarak birleştirmem gerekiyor.
print_r fonsiyonu ekrana yazdırmak için kullanılır.
aşağıda 2 örnek var.İster global olarak tanımla istersende parametre olarak.
$DogumGunuListesi = [
'Ali' => '17-09-1997',
'Veli' => '11-09-1993',
'Zeki' => '15-09-1991'
];
class Birthday{
private $birthDays = [];
public function __construct() {
global $DogumGunuListesi;
$this->birthDays = $DogumGunuListesi;
}
}
$birth = new Birthday;
var_dump($birth);
// veya
class Birthday{
private $birthDays = [];
public function __construct($DogumGunuListesi) {
$this->birthDays = $DogumGunuListesi;
}
}
$birth = new Birthday($DogumGunuListesi);
var_dump($birth);
Class dışında $DogumGunuListesi değişkenine eşitledim.
Sonucu class içinde 6'ıncı satırda global $DogumGunuListesi; ile çağırdım.
7'inci satırda echo "$DogumGunuListesi"; ile bastım. Ekran Alıntısı Ekran alıntısında Doğum günü yok yazmasının sebebi statik tanımların commentli olmasıdır.
Bununla birlikte asıl 11'inci satırdaki $this->birthDays = [] arasında olması gerekiyor.
Burada print_r() ile basınca 'Ali' => '21-09-1997', 'Veli' => '11-09-1993', 'Zeki' => '15-09-1991' çıktısını veriyor ve duruyor.
Ekran Alıntısı
Ekran alıntısı aldığım araç, görsel uzantısı olan bir bağlantı vermediği için böyle bağlantı şeklinde ekliyorum.
class Birthday {
private $birthDays;
public $today;
public $notifications;
public function __construct() {
global $DogumGunuListesi;
echo "$DogumGunuListesi";
$this->today = new DateTime('today');
// for demo purpose we set harry's birthday for every day
$this->birthDays = [
//print_r ($DogumGunuListesi)
//'Ali' => '21-09-1997',
//'Veli' => '11-09-1993',
//'Zeki' => '15-09-1991'
//'Harry' => $this->today->format('d-m').'-1991'
];
$this->notifications = [];
}
Class içinde veritabanı sorgusu çalıştırmak için fonksiyon içine global $pdo; değerini tanımlamalısın