class icerikler{
private $islem;
private $durum;
private $sinirla;
private $icerik;
private $sutunlar;
private $get_ara;
private $get_durum;
private $get_tip;
private $get_kategori;
private $get_yetki;
private $get_islem_tip;
private $get_hesap_id;
private $get_icerik_tip;
private $get_s;
public function __construct($islem, $durum, $sinirla, $icerik, $sutunlar){
global $get_ara;
$this->get_ara = $get_ara;
$this->get_durum = $_GET['durum'];
$this->get_tip = $_GET['tip'];
$this->get_kategori = $_GET['kategori'];
$this->get_yetki = $_GET['yetki'];
$this->get_islem_tip = $_GET['islem_tip'];
$this->get_hesap_id = $_GET['hesap_id'];
$this->get_icerik_tip = $_GET['icerik_tip'];
$this->get_s = $_GET['s'];
$this->islem = $islem;
$this->durum = $durum;
$this->sinirla = $sinirla;
$this->icerik = $icerik;
$this->sutunlar = ($sutunlar ? $sutunlar : '*');
}
public function getir(){
$secenekler = [
'islem' => $this->islem,
'durum' => $this->durum,
'sinirla' => $this->sinirla,
'icerik' => $this->icerik,
'sutunlar' => $this->sutunlar
];
return $this->icerik_getir($secenekler);
}
public function icerik_getir($secenekler){
global $vt;
if(is_array($secenekler)){
$islem = ($secenekler['islem'] ? $secenekler['islem'] : $this->islem);
$durum = ($secenekler['durum'] ? $secenekler['durum'] : $this->durum);
$sinirla = ($secenekler['sinirla'] ? $secenekler['sinirla'] : $this->sinirla);
$icerik = ($secenekler['icerik'] ? $secenekler['icerik'] : $this->icerik);
$tablo = icerik_tablo($icerik);
$sutunlar = ($secenekler['sutunlar'] ? $secenekler['sutunlar'] : $this->sutunlar);
}else{
return false;
}
if($tablo){
$sorgu = $vt->select($sutunlar)->table($tablo);
}else{
return 'false';
}
switch($icerik){
default:
return false;
break;
case'birim':
case'yetki':
$sorgu = $sorgu->where('tip', '=', $icerik);
if($durum=='0'){
$sorgu = $sorgu->where('durum', '=', '0');
}else{
$sorgu = $sorgu->where('durum', '=', '3');
}
if(!bosmu($this->get_ara)){
$sorgu = $sorgu->like('baslik', '%'.$this->get_ara.'%');
}
break;
case'eklenti':
case'gereksinim':
$sorgu = $sorgu->where('tip', '=', $icerik);
if($durum=='0'){
$sorgu = $sorgu->where('durum', '=', '0');
}else{
if(!bosmu($this->get_durum)){
$sorgu = $sorgu->where('durum', '=', $this->get_durum);
}else{
$sorgu = $sorgu->where('durum', '!=', '0');
}
}
if(!bosmu($this->get_ara)){
$sorgu = $sorgu->like('baslik', '%'.$this->get_ara.'%');
}
if(!bosmu($this->get_tip)){
$sorgu = $sorgu->where('kategori', '=', $this->get_tip);
}
$sorgu = $sorgu->orderBy('tarih_saat', 'desc');
break;
case'haber':
case'hizmet':
case'sayfa':
case'sozlesme':
case'slider':
$sorgu = $sorgu->where('tip', '=', $icerik);
if($durum=='0'){
$sorgu = $sorgu->where('durum', '=', '0');
}else{
if(!bosmu($this->get_durum)){
$sorgu = $sorgu->where('durum', '=', $this->get_durum);
}else{
$sorgu = $sorgu->where('durum', '!=', '0');
}
}
if(!bosmu($this->get_ara)){
$sorgu = $sorgu->like('baslik', '%'.$this->get_ara.'%');
}
$sorgu = $sorgu->orderBy('tarih_saat', 'desc');
break;
case'kategori':
if($durum=='0'){
$sorgu = $sorgu->where('durum', '=', '0');
}else{
if(!bosmu($this->get_durum)){
$sorgu = $sorgu->where('durum', '=', $this->get_durum);
}else{
$sorgu = $sorgu->where('durum', '!=', '0');
}
}
if(!bosmu($this->get_ara)){
$sorgu = $sorgu->like('baslik', '%'.$this->get_ara.'%');
}
if(!bosmu($this->get_tip)){
$sorgu = $sorgu->where('tip', '=', $this->get_tip);
}
$sorgu = $sorgu->orderBy('tarih_saat', 'desc');
break;
case'kupon':
if($durum=='0'){
$sorgu = $sorgu->where('durum', '=', '0');
}else{
if(!bosmu($this->get_durum)){
$sorgu = $sorgu->where('durum', '=', $this->get_durum);
}else{
$sorgu = $sorgu->where('durum', '!=', '0');
}
}
if(!bosmu($this->get_ara)){
$sorgu = $sorgu->like('baslik', '%'.$this->get_ara.'%');
}
$sorgu = $sorgu->orderBy('tarih_saat', 'desc');
break;
case'yazilim':
$sorgu = $sorgu->where('tip', '=', $icerik);
if($durum=='0'){
$sorgu = $sorgu->where('durum', '=', '0');
}else{
if(!bosmu($this->get_durum)){
$sorgu = $sorgu->where('durum', '=', $this->get_durum);
}else{
$sorgu = $sorgu->where('durum', '!=', '0');
}
}
if(!bosmu($this->get_kategori)){
$sorgu = $sorgu->where('kategori', '=', $this->get_kategori);
}
if(!bosmu($this->get_ara)){
$sorgu = $sorgu->like('baslik', '%'.$this->get_ara.'%');
}
$sorgu = $sorgu->orderBy('tarih_saat', 'desc');
break;
case'yonetici':
$sorgu = $sorgu->where('tip', '=', $icerik);
if($durum=='0'){
$sorgu = $sorgu->where('durum', '=', '0');
}else{
if(!bosmu($this->get_durum)){
$sorgu = $sorgu->where('durum', '=', $this->get_durum);
}else{
$sorgu = $sorgu->where('durum', '!=', '0');
}
}
if(!bosmu($this->get_yetki)){
$sorgu = $sorgu->where('yetki', '=', $this->get_yetki);
}
if(!bosmu($this->get_ara)){
$sorgu = $sorgu->like('isim', '%'.$this->get_ara.'%');
}
$sorgu = $sorgu->orderBy('isim', 'asc');
break;
case'musteri':
$sorgu = $sorgu->where('tip', '=', $icerik);
if($durum=='0'){
$sorgu = $sorgu->where('durum', '=', '0');
}else{
if(!bosmu($this->get_durum)){
$sorgu = $sorgu->where('durum', '=', $this->get_durum);
}else{
$sorgu = $sorgu->where('durum', '!=', '0');
}
}
if(!bosmu($this->get_ara)){
$sorgu = $sorgu->like('isim', '%'.$this->get_ara.'%');
}
$sorgu = $sorgu->orderBy('isim', 'asc');
break;
case'kayit':
if(!bosmu($this->get_durum)){
$sorgu = $sorgu->where('durum', '=', $this->get_durum);
}
if(!bosmu($this->get_islem_tip)){
$sorgu = $sorgu->where('islem_tip', '=', $this->get_islem_tip);
}
if(!bosmu($this->get_hesap_id)){
$sorgu = $sorgu->where('hesap_id', '=', $this->get_hesap_id);
}
if(!bosmu($this->get_icerik_tip)){
$sorgu = $sorgu->where('icerik_tip', '=', $this->get_icerik_tip);
}
if(!bosmu($this->get_ara)){
$sorgu = $sorgu->like('sonuc', '%'.$this->get_ara.'%');
}
$sorgu = $sorgu->orderBy('tarih_saat', 'desc');
break;
}
if($sinirla==true){
$sinir = [0, 25];//$this->kactane();
$sorgu = $sorgu->limit($sinir[0], $sinir[1]);
}
if($islem=='liste'){
$sonuc = $sorgu->getAll();
}elseif($islem=='say'){
$sonuc = $sorgu->getAll('count');
}
return $sonuc;
}
private function kactane(){
$secenekler = [
'islem' => 'say',
'sinirla' => false,
'sutunlar' => 'id'
];
$toplam_icerik = $this->icerik_getir($secenekler);
if($toplam_icerik){
$toplam_sayfa = ceil($toplam_icerik / panel_icerik_say);
$get_sayfa = isset($this->get_s) ? (int) $this->get_s : 1;
$sayfa = ($get_sayfa < 1 ? 1 : $get_sayfa);
if($sayfa > $toplam_sayfa){
$sayfa = $toplam_sayfa;
}
$baslangic = ($sayfa - 1) * panel_icerik_say;
$bitis = panel_icerik_say;
return[$baslangic, $bitis];
}else{
return false;
}
}
}NOT: Sınıfı en hızlı ve temiz çalışacak şekilde nasıl düzenleyebilirim? Ayrıca PDOx sınıfını kullanıyorum.
PHP Class Oluşturma Hakkında
9
●490
- 16-07-2019, 12:57:30Arkadaşlar merhaba. Konuyu doğru yere mi açtım bilmiyorum. Yanlış açtıysam kusura bakmayın. Yetiştirmem gereken bir proje var ve çok bir araştırma yapamadan fonksiyonlarımı class olarak toparlamam gerekiyor. Daha önce sadece fonksiyonlar ile çalışıyordum ancak bu projede class olarak toparlamam gerekti. Aşağıdaki yazacağım sınıf yapısı muhtemelen bir çok eleştiriye sebep olacak çünkü ilk denemem diyebilirim. Düzgün çalışmıyor zaten. Bir arkadaş hatalarımı belirterek kodları düzeltirse çok sevinirim. Hataları fark ettikten sonra diğer fonksiyonlarımı sınıflar halinde toparlamak daha kolay olacak zaten. Şimdiden çok teşekkür ederim.
- 16-07-2019, 13:39:37Hocam bu sınıf bir yönetim paneli sınıfı. Haber, Sayfa, Slider vs. bunları sayfalayarak listelemek için kullandığım bir fonksiyon. switch() içerisindeki kodlar çok karmaşık görünebilir ancak veritabanındaki hemen hemen tüm tabloları kontrol etmem için bulabildiğim en temiz kod yapısı bu.Zeta adlı üyeden alıntı: mesajı görüntüle
Detaylı açıklamak gerekirse;
$islem = 'liste'; $durum = ''; $sinirla = true; $icerik = 'haber'; $sutunlar = '*'; $icerikler = new icerikler($islem, $durum, $sinirla, $icerik, $sutunlar ); $getir= $icerikler ->getir();
olduğunu varsayalım. Bu değişkenlerle kullandığımda icerikler sınıfı, 'haber' içerik tipinin bağlı olduğu mysql tablosundan, durum sütunu 0 olmayan tüm satırların tüm sütunlarını getirecek. bunu yaparken de kendi içerisinde sayfalama yaparak 0,25 arası veya ?s=1 (fonksiyon içerisinde $this->get_s olarak belirtilen değişken) ise 25, 50 arası satırları getirecek.
Kodun alt bölümünde yer alan $sinir = [0, 25];//$this->kactane(); satırı yanlış yazmışım konuyu açarken. $sinir = $this->kactane(); olacaktı orası.parsmedya33 adlı üyeden alıntı: mesajı görüntüle - 16-07-2019, 13:43:21böyle yapmak yerine neden ayrı sınıflar oluşturmadınız ? hem daha okunabilir, hemde daha hızlı olurdu örn :
class haberler { public function ekle() public function guncelle() public function listele() public function sil() } class kategoriler { public function ekle() public function guncelle() public function listele() public function sil() } - 16-07-2019, 13:47:00bu da bir yöntem ancak sınıfı bundan sonraki projelerimde de kullanmak istiyorum. Büyük değişiklikler yerine küçük değişiklikler yapıp tek sınıf üzerinden tüm işlemleri halletmek daha mantıklı geliyor açıkçası
- 16-07-2019, 14:23:37fikriniz güzel ancak uygulamanız kötü , benim yukarıda verdiğim örnektede ekle kodunu 1 defa yazarsınız ,birden fazla kullanımlarda sadece tablo adını değiştirirsiniz olur biter , aktif olarak laravel kullanıyorum oradan bir örnek daha vereyim ; bu ekleme metodum aynı metodu kullanıcı içinde kullanıp sadece sütun adlarını ve tablo adlarını değiştirmek yeterli geliyor ve daha düzenli bir yapı kuruluyor. Belki şimdi sizinki daha kolay ve kullanışlı gelebilir ama ilerleyen zamanlarda kod bloklarınız arttıkça işin içinden çıkamazsınız benden söylemesi , yapıyı baştan temiz kurunparsmedya33 adlı üyeden alıntı: mesajı görüntüle
http://www.rizagunes.com/php-kod-standartlari
public function ekle() { return view('admin.kategori.ekle'); } public function ekle_post() { $this->validate(request(), [ 'kategori_adi' => 'required' ]); $data = request()->only('kategori_adi', 'url', 'icon', 'baslik'); if(!request()->filled('url')) { $data['url'] = Str::slug(request('kategori_adi')); request()->merge(['url' => $data['url']]); } $kategoriEkle = Kategori::create($data); return redirect()->route('admin.kategori.duzenle', $kategoriEkle->id) ->with('mesaj_tur', 'success') ->with('mesaj', ('Kategori Kaydedildi')); } - 16-07-2019, 14:32:37Cevabınız için teşekkürler hocam. Laravel kullanmadığım için kod yapısına pek aşina değilim. Ben de zaten sıfırdan temiz bir kod yapısı oluşturmaya çalışıyorum. O yüzden sınıflandırmaya ihtiyaç duydum. Sizin verdiğiniz örnek gibi bir sistemi de düşünebilirim ancak öncelikle benim sınıf yapısındaki sorunu halletmem gerekiyor. Ordaki sorun da fonksiyon içinde bir fonksiyonun çalışmaması durumu. Gözden kaçırdığım yeri çözebilsem kodu zaten genel olarak toparlayacağım ancak kactane fonksiyonunu çağırınca sınıf null döndürüyor.Zeta adlı üyeden alıntı: mesajı görüntüle
- 16-07-2019, 14:52:21hatayı tam göremedim ama fonksiyon içerisinde fonksiyon kullanımında self kullanabilirsiniz belki this terimi fonksiyon olarak etki etmiyor olabilir sınıf içerisineparsmedya33 adlı üyeden alıntı: mesajı görüntüle
- 16-07-2019, 15:31:27Burada hızlıca başlangıç yapabilmen için örneklerle güzel anlatılmış bir kaynak var bunu inceleyebilirsin;
https://www.guru99.com/object-oriented-programming.html
Bir kaç hızlı tavsiye verilebilir;- Gereksiz kod yazma. Yani aynı işlemi daha az kodla yapabiliyorsan az olanı kullan ve her zaman azaltmaya çalış.
- Her işlem için ayrı sınıf yaz, Veritabanı bağlantıları ve işlemleri için ayrı, Kategoriler için ayrı Postlar için ayrı ve daha sonra bunları birbirleri ile iletişime sok. Sınıfları birbirinden ayırabildiğin kadar ayır ama gereksiz sınıfta yaratma. Örneğin post eklemek için bir sınıf post silmek için bir sınıfa gerek yok. Postla ilgili tüm işlemleri Posts sınıfında yap
- Kavramlarını ingilizce yazmaya çalış. Bunun sana büyük faydaları olacak. Aynı zamanda doğru adlandırmaya dikkat et. Örneğin string1 gibi bir adlandırma yanlışken name daha doğrudur. Değişkenlerin kısa akılda kalıcı ve bağlamından koparılmadan adlandırılmalı. Camel case ($ornekDegiskenIsmi) ve snake case ($ornek_degisken_ismi) gibi isimlendirme kurallarını incele. Bunlar artık standartlaşmış kurallardır. http://kaanosman.github.io/coding-st...ng-convention/
- Sınıflardaki fonksiyonlarda doğrudan html çıktısı dönmemeye çalış. Bunun yerine obje(object) ya da dizi(array) döndürmeye çalış. Bunu yaptığında temalarını değiştirmen de daha kolay olacaktır.
- Tasarım desenlerini öğrenmeye çalış(design pattern)