• 24-07-2013, 20:50:07
    #1
    Oluştuduğum class şöyle;
    class register {
    	
    		public function empty_control($username, $password, $email) {	
    			if (empty($username) or empty($password) or empty($email)) { echo "Lütfen Boş alan bırakmayınız!"; exit(); }
    		}
    		
    		public function lenght_control($username, $password) {
    			if (strlen($username) < 6 or strlen($username) > 32) { echo "Kullanıcı Adınız 6 karakterden kısa, 32 karakterden uzun olmamalıdır!"; exit(); }
    			if (strlen($password) < 6 or strlen($password) > 32) { echo "Şifreniz 6 karakterden kısa, 32 karakterden uzun olmamalıdır!"; exit(); }
    		}
    		
    		public function email_control($email) {
    			if (filter_var($email, FILTER_VALIDATE_EMAIL)) { echo "Lütfen geçerli bir E-posta adresi yazın!"; exit(); }
    		}
    		
    		public function using_control($username) {
    			var $say;
    			if ($say > 0) { echo "Bu kullanıcı adı kullanılıyor"; }
    		}
    	}
    Ve index.php dosyamda clası şu şekilde kullanıyorum;

            $r_username = "Deneme";
    	$register = new register();
    	$say = $db->get_var("Select count(*) from users");
    	$register->using_control($r_username);
    Parse error: syntax error, unexpected T_VAR in C:\wamp\www\CrafterCms\inc\Class\register.class.ph p on line 26 hatasını alıyorum.

    26. satırda ise şu var;
    var $say;
    $db değişkeni ezSQL bağlantımın değişkeni.

    Sorun nedir acaba? :/

    Bir class içinde başka bir sınıfı nasıl çalıştırabiliriz yada?
  • 24-07-2013, 21:13:08
    #2
    Javaya gitmişsin hocam sen
    var $say; yazmaya gerek yok zaten
  • 24-07-2013, 22:09:57
    #3
    public function using_control($username) {
    			var $say;

    $username yerine $say yazınca ;

    public function using_control($say) {
    olur sanki
  • 25-07-2013, 01:39:35
    #4
    Kimlik doğrulama veya yönetimden onay bekliyor.
    <?php 
        
        class register { 
    
            public $username;
         
            public function empty_control($username, $password, $email) {     
                if (empty($username) or empty($password) or empty($email)) { echo "Lütfen Boş alan bırakmayınız!"; exit(); } 
            } 
             
            public function lenght_control($username, $password) { 
                if (strlen($username) < 6 or strlen($username) > 32) { echo "Kullanıcı Adınız 6 karakterden kısa, 32 karakterden uzun olmamalıdır!"; exit(); } 
                if (strlen($password) < 6 or strlen($password) > 32) { echo "Şifreniz 6 karakterden kısa, 32 karakterden uzun olmamalıdır!"; exit(); } 
            } 
             
            public function email_control($email) { 
                if (filter_var($email, FILTER_VALIDATE_EMAIL)) { echo "Lütfen geçerli bir E-posta adresi yazın!"; exit(); } 
            } 
             
            public function using_control() { 
                global $db;
                $say = $db->get_var("Select count(*) from users WHERE username = '".$db->escape($this->username)."'"); 
                if ($say > 0) { echo "Bu kullanıcı adı kullanılıyor"; } 
            } 
        } 
    
        // kullanım
        $register = new register(); 
        $register->username = 'quaick';
        $register->using_control();
  • 25-07-2013, 01:46:47
    #5
    Kimlik doğrulama veya yönetimden onay bekliyor.
    Öncelikle yazdığınız sınıfın gerekliliğini tartışmak gerekli. "register" işlemi için bir sınıf yazmak OOP açısından hiç mantıklı değil. Lügatta şöyle bir ifadeyi hatırlıyorum: "Yazılan bir sınıf o nesneyle alakalı tüm işlemleri barındırmalıdır." Bunun anlamı şudur: Siz "register" işlemi için sınıf yazmamalısınız. Kullanıcıları ifade eden bir nesneyi sınıf olarak yazmalısınız. Yazamazsınız değil, yazmamalısınız. "register" işlemi ancak "User" sınıfının bir metotu olmalıdır.

    Sorunuza gelirsek de sınıf içerisinde başka bir nesneyi tabii ki kullanabilirsiniz. Ancak burada yine OOP'un ilkelerinden "düşük bağımlılık"a aykırı işler yapılmamalı. Yani özetle sınıfınız diğer sınıflara en az düzeyde bağımlı olmalıdır. Bağımlılığı ne kadar az ise, sınıfın o kadar iyi tasarlanmış demektir. Aşağıda bir link verdim. İyi anlatılmış orada bu konu.

    Ek olarak, burada "bağımlılık enjeksyonu" (dependency enjection) konusunu da ele almakta fayda var. Ben de bu konuda hala çalışıyorum.

    http://www.emreeren.com/2007/08/nesn...ogramlama.html
  • 25-07-2013, 01:55:34
    #6
    grafitus adlı üyeden alıntı: mesajı görüntüle
    Öncelikle yazdığınız sınıfın gerekliliğini tartışmak gerekli. "register" işlemi için bir sınıf yazmak OOP açısından hiç mantıklı değil. Lügatta şöyle bir ifadeyi hatırlıyorum: "Yazılan bir sınıf o nesneyle alakalı tüm işlemleri barındırmalıdır." Bunun anlamı şudur: Siz "register" işlemi için sınıf yazmamalısınız. Kullanıcıları ifade eden bir nesneyi sınıf olarak yazmalısınız. Yazamazsınız değil, yazmamalısınız. "register" işlemi ancak "User" sınıfının bir metotu olmalıdır.

    Sorunuza gelirsek de sınıf içerisinde başka bir nesneyi tabii ki kullanabilirsiniz. Ancak burada yine OOP'un ilkelerinden "düşük bağımlılık"a aykırı işler yapılmamalı. Yani özetle sınıfınız diğer sınıflara en az düzeyde bağımlı olmalıdır. Bağımlılığı ne kadar az ise, sınıfın o kadar iyi tasarlanmış demektir. Aşağıda bir link verdim. İyi anlatılmış orada bu konu.

    Ek olarak, burada "bağımlılık enjeksyonu" (dependency enjection) konusunu da ele almakta fayda var. Ben de bu konuda hala çalışıyorum.

    http://www.emreeren.com/2007/08/nesn...ogramlama.html
    Hocam haklısınız ben sadece bu classları falan kurcalayarak pratik yapıyorum sınıfı öylesine yazdim pratik amaçlı yani Yinede teşekkürler

    Hocam şimdi sizin dediğinize göre mesela uzunluk değer kontrolleri olan bir class olmalı, database işlemleri için bir class olmalı. Doğrumudur?

    --R10.NET; Flood Engellendi -->-> Yeni yazılan mesaj 01:55:34 -->-> Daha önceki mesaj 01:49:39 --

    İRoyal adlı üyeden alıntı: mesajı görüntüle
    <?php 
        
        class register { 
    
            public $username;
         
            public function empty_control($username, $password, $email) {     
                if (empty($username) or empty($password) or empty($email)) { echo "Lütfen Boş alan bırakmayınız!"; exit(); } 
            } 
             
            public function lenght_control($username, $password) { 
                if (strlen($username) < 6 or strlen($username) > 32) { echo "Kullanıcı Adınız 6 karakterden kısa, 32 karakterden uzun olmamalıdır!"; exit(); } 
                if (strlen($password) < 6 or strlen($password) > 32) { echo "Şifreniz 6 karakterden kısa, 32 karakterden uzun olmamalıdır!"; exit(); } 
            } 
             
            public function email_control($email) { 
                if (filter_var($email, FILTER_VALIDATE_EMAIL)) { echo "Lütfen geçerli bir E-posta adresi yazın!"; exit(); } 
            } 
             
            public function using_control() { 
                global $db;
                $say = $db->get_var("Select count(*) from users WHERE username = '".$db->escape($this->username)."'"); 
                if ($say > 0) { echo "Bu kullanıcı adı kullanılıyor"; } 
            } 
        } 
    
        // kullanım
        $register = new register(); 
        $register->username = 'quaick';
        $register->using_control();
    Bu arada teşekkürler
  • 25-07-2013, 02:42:07
    #7
    quaick adlı üyeden alıntı: mesajı görüntüle
    Hocam haklısınız ben sadece bu classları falan kurcalayarak pratik yapıyorum sınıfı öylesine yazdim pratik amaçlı yani Yinede teşekkürler

    Hocam şimdi sizin dediğinize göre mesela uzunluk değer kontrolleri olan bir class olmalı, database işlemleri için bir class olmalı. Doğrumudur?
    Evet ve hayır. Veritabanı işlemleri için ayrı bir sınıf, fakat uzunluk kontrolü için ayrı bir sınıf yazmak tamamiyle gereksizdir. Uzunluk kontrolünü "register" metodu içerisinde iki satırda yaparsınız zaten. Ya da uzunluk kontrolünü bir "Utility" (yardımcı araç-gereçler) sınıfı içerisinde bir metot olarak tanımlarsınız.

    Özetle eğer yapmak istediğinizi ben yapıyor olsaydım şöyle bir şey yapardım:
    <?php 
    
    class Utils
    {
    	static public function lenghtControl($data, $min, $max)
    	{
    		$dataLenght = strlen($data);
    
    		/*
    			Birgün burada şu CoffeScript tarzı şu satırı kullanabilme ümidiyle yazıyorum bu satırı. :)
    
    			return $min < $dataLenght < $max;
    		 */
    		return $dataLenght > $min || $dataLenght < $max;
    	}
    
    	// Diğer yardımcı metotlar...
    	// Burada metotların "static" olmasına dikkat edin.
    }
    <?php 
    
    class User
    {
    	protected $_db;
    
    	protected $_username;
    	protected $_password;
    	// Kullanıcıya ait diğer özellikler...
    
    	public function __construct(Database $db)
    	{
    		$this->_db = $db;
    	}
    
    	public function register()
    	{
    		if (!Utils::lenghtControl($this->_username, 6, 32))
    		{
    			echo 'Kullanıcı adı 6-32 karakter aralığında olmalıdır!';
    			return;
    		}
    
    		if (!Utils::lenghtControl($this->_password, 6, 32))
    		{
    			echo 'Kullanıcı parolası 6-32 karakter aralığında olmalıdır!';
    			return;
    		}
    
    		// Veritabanı kayıt işlemleri...
    		// 
    		// $this->db->insert('users', array(
    		// 	Veriler...
    		// ));
    	}
    
    	public function login()
    	{
    		// Kullanıcı giriş işlemleri...
    	}
    
    	// Getter/Setter metotları...
    	public function getUsername()
    	{
    		return $this->_username;
    	}
    
    	public function setUsername($value)
    	{
    		$this->_username = $value;
    
    		return $this;
    	}
    
    	public function getPassword()
    	{
    		return $this->_password;
    	}
    
    	public function setPassword($value)
    	{
    		$this->_password = sha1($value);
    
    		return $this;
    	}
    
    	// Diğer kullanıcı metotları...
    }
    <?php
    
    class Database
    {
    	public function insert($table, array $data)
    	{
    
    	}
    }
    <?php
    
    $db = new Database;
    
    $user = new User($db);
    $user->setUsername($_GET['u'])
    	->setPassword($_GET['p']);
    $user->register();
    Sadece editörde yazıp gönderdim. Çalıştırmadım, çalışmaması normal. Sadece yapısal olarak örnek almanız içindi bu kod.

    Kişisel olarak bir teşekkür: Benim için uzun bir süredir kod yaz(a)mıyordum. Sayenizde üstteki örneği yazdım; açıldığımı hissediyorum. Teşekkürler!
  • 25-07-2013, 02:42:24
    #8
    Üyeliği durduruldu
    database class 'ı
    query insert update delete gibi sorgu tekniklerinin hepsini içermeli ve kullanımı normalden kolay olmalı

    user class'ı
    user register profil güncelleme kullanıcı bilgileri yetkileri vs vs gibi bilgilerin hepsini içermeli,

    kısacası programlamada belli başlı kategoriler vardır örneğin film sitesi yapıyorsun:

    database,admin,user,film,oyuncu,yönetmen,yapımcı gibi class lar oluşturabilirsin
    filmekle sınıfı film düzenle sınıfı film sil sınıfı gibi ayrı ayrı yapman mantıksız olur bunun yerine hepsini film sınıfında toplamalısın


    ama herşeye rağmen bildiğin gibi yap. su akar yolunu bulur. nasıl olsa kurcalaya kurcalaya herşeyin kısayolunu bulacaksın... ama bir klavuz edinirsen (karga olmasın) , forumlarda bloglarda hemen her konuyla ilgili geniş kapsamlı makaleler vardır bunları okursan daha kolay kavrayabilirsin
  • 25-07-2013, 14:04:14
    #9
    grafitus adlı üyeden alıntı: mesajı görüntüle
    Evet ve hayır. Veritabanı işlemleri için ayrı bir sınıf, fakat uzunluk kontrolü için ayrı bir sınıf yazmak tamamiyle gereksizdir. Uzunluk kontrolünü "register" metodu içerisinde iki satırda yaparsınız zaten. Ya da uzunluk kontrolünü bir "Utility" (yardımcı araç-gereçler) sınıfı içerisinde bir metot olarak tanımlarsınız.

    Özetle eğer yapmak istediğinizi ben yapıyor olsaydım şöyle bir şey yapardım:
    <?php 
    
    class Utils
    {
    	static public function lenghtControl($data, $min, $max)
    	{
    		$dataLenght = strlen($data);
    
    		/*
    			Birgün burada şu CoffeScript tarzı şu satırı kullanabilme ümidiyle yazıyorum bu satırı. :)
    
    			return $min < $dataLenght < $max;
    		 */
    		return $dataLenght > $min || $dataLenght < $max;
    	}
    
    	// Diğer yardımcı metotlar...
    	// Burada metotların "static" olmasına dikkat edin.
    }
    <?php 
    
    class User
    {
    	protected $_db;
    
    	protected $_username;
    	protected $_password;
    	// Kullanıcıya ait diğer özellikler...
    
    	public function __construct(Database $db)
    	{
    		$this->_db = $db;
    	}
    
    	public function register()
    	{
    		if (!Utils::lenghtControl($this->_username, 6, 32))
    		{
    			echo 'Kullanıcı adı 6-32 karakter aralığında olmalıdır!';
    			return;
    		}
    
    		if (!Utils::lenghtControl($this->_password, 6, 32))
    		{
    			echo 'Kullanıcı parolası 6-32 karakter aralığında olmalıdır!';
    			return;
    		}
    
    		// Veritabanı kayıt işlemleri...
    		// 
    		// $this->db->insert('users', array(
    		// 	Veriler...
    		// ));
    	}
    
    	public function login()
    	{
    		// Kullanıcı giriş işlemleri...
    	}
    
    	// Getter/Setter metotları...
    	public function getUsername()
    	{
    		return $this->_username;
    	}
    
    	public function setUsername($value)
    	{
    		$this->_username = $value;
    
    		return $this;
    	}
    
    	public function getPassword()
    	{
    		return $this->_password;
    	}
    
    	public function setPassword($value)
    	{
    		$this->_password = sha1($value);
    
    		return $this;
    	}
    
    	// Diğer kullanıcı metotları...
    }
    <?php
    
    class Database
    {
    	public function insert($table, array $data)
    	{
    
    	}
    }
    <?php
    
    $db = new Database;
    
    $user = new User($db);
    $user->setUsername($_GET['u'])
    	->setPassword($_GET['p']);
    $user->register();
    Sadece editörde yazıp gönderdim. Çalıştırmadım, çalışmaması normal. Sadece yapısal olarak örnek almanız içindi bu kod.

    Kişisel olarak bir teşekkür: Benim için uzun bir süredir kod yaz(a)mıyordum. Sayenizde üstteki örneği yazdım; açıldığımı hissediyorum. Teşekkürler!
    Teşekkürler hocam Önemli değil :P