• 27-07-2009, 21:39:12
    #1
    Arkadaşlar merhaba,
    fonksiyon içinde dosya include edilirken Class işlemlerinde biraz sorun çıkartıyorlar

    çok basitçe bir örnek vererek sorunun temelini belirteyim.

    index.php içeriği
    include 'func.php'
    load ('dnm');
    $dnm->yaz();
    func.php içeriği:
    function load($o)
    {
        include ($o.'.php');
    }
    dnm.php iceriği:
    deneme class dosyası
    <?php
    class dnm
    {
        function yaz()
        {
            echo 'aaa';    
        }
    }
    $dnm = new dnm();
    ?>
    bu şekilde index.php çalıştırıldığında ekran çıktısı :
    deneme class dosyası
    Fatal error:  Call to a member function yaz() on a non-object in C:\AppServ\www\mmt\index.php on line 5
    "deneme class dosyası" yazısı geldiğine göre dosya include ediliyor ama dnm.php sonundaki $dnm = new dnm(); işlemi çalışmıyor.
    bunu anlayamadım açıkcası.
    ama dosyayı doğrudan include 'dnm.php'; load fonksyionunu hiç kullanmadan çağırırsam sorun olmuyor.

    fonsyion içinde include edildiği zaman classı neden değişkene atmıyor acaba ?
    bir fikri olan var mı ?
  • 27-07-2009, 21:45:35
    #2
    değişkeni global olarak çağırmak gerekiyor yanlışım yoksa
  • 27-07-2009, 21:46:13
    #3
    $dnm değişkeni load fonksiyonu içerisinde kalıyor. return ile çıkartmak lazım. return la çıkartmak lazım gibi geldi bana.
  • 27-07-2009, 22:21:04
    #4
    Üyeliği durduruldu
    Singleton desing pattern işinizi görebilir.
  • 27-07-2009, 22:46:26
    #5
    Misafir adlı üyeden alıntı: mesajı görüntüle
    değişkeni global olarak çağırmak gerekiyor yanlışım yoksa
    global sorunu halletti, hiç bu açıdan yaklaşmamıştım olaya
    yalnız bu durumda çok fazla global kulanımı olmuş olacak, bunun eksisi ne kadar olur acaba , bir fikriniz var mı ?

    sendetiklat adlı üyeden alıntı: mesajı görüntüle
    $dnm değişkeni load fonksiyonu içerisinde kalıyor. return ile çıkartmak lazım. return la çıkartmak lazım gibi geldi bana.
    return ile aktarmak yolu uzatıyor gibi, normal inlcude ile aynı kapıya çıkıyor gibi.

    LoverzSoft adlı üyeden alıntı: mesajı görüntüle
    Singleton desing pattern işinizi görebilir.
    bunu hemen araştırıyorum, belki farklı bir yaklaşım sağlayabilir. teşekkürler.
  • 27-07-2009, 22:50:12
    #6
    Üyeliği durduruldu
    arastirmaniza gerek yok kendi sinifimi vereyim

    <?php
    class Singleton
    {	
    	private static $sinif = array();
    	public static $sinifSay = 0;
     
    	private function __construct() { }
     
    	public static function sinifal($sinif)
    	{	
    		if (!(self::$sinif[$sinif] instanceof $sinif))
    		{
    			include_once(self::$sinif.'.php');
    			self::$sinif[$sinif] = new $sinif;
    			self::$sinifSay++;
    		}
    		return self::$sinif[$sinif];
    	}
    }
    ?>
    direk erişimi engelledigim için

    $albakim = Singleton::sinifal("dnm");

    $albakim->yaz();

    ve mutlu son
  • 27-07-2009, 23:33:31
    #7
    LoverzSoft adlı üyeden alıntı: mesajı görüntüle
    direk erişimi engelledigim için

    $albakim = Singleton::sinifal("dnm");

    $albakim->yaz();

    ve mutlu son
    Teşekkürler @loverSoft , singleton'un özelliği iyiymiş daha önce duymamıştım hiç
    Peki şöyle yapabilir miyiz asıl amacımda bu tarz bi işlev vardı çünkü.
    benim yapmaya çalıştığımda,
    $classes = array ('dnm','db','metin','stresc');
    load ($classes);
    fonksyionu ile çağırdıktan sonra herhangi bir
    $db = new class db(); gibi atamalar yapmadan doğrudan
    $dnm->yaz();
    şeklinde kullanabilmek.
    singleton içinde denedim biraz, hata aldım da hep
  • 27-07-2009, 23:36:50
    #8
    Üyeliği durduruldu
    uysal_rockci adlı üyeden alıntı: mesajı görüntüle
    Teşekkürler @loverSoft , singleton'un özelliği iyiymiş daha önce duymamıştım hiç
    Peki şöyle yapabilir miyiz asıl amacımda bu tarz bi işlev vardı çünkü.
    benim yapmaya çalıştığımda,
    $classes = array ('dnm','db','metin','stresc');
    Singleton::sinifal($classes);
    fonksyionu ile çağırdıktan sonra herhangi bir
    $db = new class db(); gibi atamalar yapmadan doğrudan
    $dnm->yaz();
    şeklinde kullanabilmek.
    singleton içinde denedim biraz, hata aldım da hep
    onun için bi sınıf yazmıştım eskiden ofisteki pc'mde var sabah pm olarak atarım bulabilirsem.
  • 28-07-2009, 17:26:22
    #9
    LoverzSoft adlı üyeden alıntı: mesajı görüntüle
    onun için bi sınıf yazmıştım eskiden ofisteki pc'mde var sabah pm olarak atarım bulabilirsem.
    valla ne yalan söyliyeyim paylaşırsanız çok makbule geçer.
    şimdi dışardayım ama eve gidince diğer dediğiniz yolu da deniyeceğim
    olursa hoş olur