Yapıya göre bazı yöntemler oluşturma veya silme

3 Cevap

Based on constructor of the class. create or destroy new methods. I often requires based on construct to disable or destroy methods within the class. Can any one help me out?

class Test
{ 
  function __construct(userID)
  { 
     if(!isValidUser($userID))
     { destroy(methods); }
  }
  function addPost()
  {

  }
}

Bir kez yok olarak adlandırılır. Yöntemler veya seçilen yöntemler imha edilmeli

Bu sefer anlamak umuyoruz.

3 Cevap

Sen sınıfının bir alt sınıfının bir örneğini oluşturmak için fabrika deseni kullanabilirsiniz. Her alt sınıf ihtiyacı yöntemleri vardır. Superclass sadece her alt sınıf ihtiyacı yöntemleri vardır.

class User
{
    function foo(){}
    function foo1(){}
    static function constructUser()
    {
		if(self::isValidUser())
		{
			return new ValidUser();	
		}
		else
		{
			return new User();
		}
    }   

    static function isValidUser()
    {
    	//...
    }
}

 class ValidUser extends User
 {
    function addItem(){}
 }

 $user = User::constructUser();

Bir nesne (ya da işlev) da argümanlarına bağlı olarak farklı nesneler oluşturur: Ben Fabrika desen ihtiyacı his var.

Bir NonAuthenticatedUser vs bir AuthenticatedUser nesne: yöntemlerin farklı bir dizi, kullanıcıya bağlı olarak, başka tür nesneleri yaratıyor tanımlarken gerçekten ne çünkü.

Bunun için ClassX bir kurucu kullanarak gerçekten çok iyi bir yaklaşım değildir.

class User {  // with common methods
}

class ValidUser extends User { 
     function onlyForValid() {}
}

class InvalidUser extends User {
     function onlyForInvalid() {}
}

function createObject( $id ){
    if( isValidUser( $id ) ) return new ValidUser( $id );
    else return new InvalidUser( $id );
}

PHP işlevleri devre dışı bırakmak ya da yok etmek için hiçbir yolu yoktur. Ancak, ters ucundan bu yaklaşım. Yani, sadece işlevleri oluşturmak eğer uygun yapıcı içerisinde (yani) (create_function kullanarak). Alternatif olarak, bir üst sınıfı kullanmak ve sadece ihtiyaçları altsınıf işlevlerini genişleten bir alt sınıfını kullanarak uzatabilirsiniz. Eğer daha detaylı izah isterseniz ben size bir örnek gönderebilir.