Ben bu sorunun biçimi ile bir şey denemek için gidiyorum ve bunu işlemek için daha iyi bir yol hakkında önerileri çok açık değilim.
Ben refactormycode üzerinde sınıf için kod gönderdiniz yani sadece söz konusu kodun bir demet dökümü istemiyordu.
base class for easy class property handling strong>
Benim düşünce insanlar geri refactorings için refactormycode değişiklikleri ve sonrası bağlantıları Posta kodu burada parçacıkları ya da yapabilirsiniz oldu. Ben buna dayanarak upvotes yapmak ve (açık bir "kazanan" var varsayarak) bir cevabı kabul edeceğiz.
Herhangi bir oranda, sınıfın kendisi için:
Ben alıcı / ayarlayıcı sınıf yöntemleri hakkında tartışma bir sürü görmek ve sadece doğrudan basit özellik değişkenleri erişmek için ya da her sınıf açık get / set yöntemleri tanımlanmış, falan filan olmalıdır iyidir. Ben daha sonra daha fazla mantığı eklemek için olması durumunda açık yöntemleri sahip fikir gibi. Sonra sınıfını kullanan herhangi bir kod değiştirmeniz gerekmez. Ancak bu gibi bakmak bir milyon fonksiyonları olan nefret:
public function getFirstName()
{
return $this->firstName;
}
public function setFirstName($firstName)
{
return $this->firstName;
}
Şimdi ben (Birisi bana önerebilirsiniz ki bunu yapmanın daha iyi bir yolu var olduğunu umuyorum) Bunu yapmak için ilk kişi değilim eminim.
Temelde, PropertyHandler sınıf bir __ çağrı sihirli yöntemi vardır. "Almak" veya "set" ile başlar __ çağrı yoluyla gelen herhangi yöntemleri sonra bir ilişkisel diziye değerlerini ayarlamak veya almak işlevlerine yönlendirilir. Diziye anahtar get veya set sonra arama yönteminin adıdır. __ Çağrı girdiği yöntemi "getFirstName" Yani, eğer, dizi anahtarı "Ad" dir.
Otomatik olarak alt sınıf zaten "getFirstName" yöntemi tanımlanmış olan davanın ilgilenir çünkü ben __ çağrısı kullanarak sevdim. Benim izlenimim (ve ben yanlış olabilir) olduğunu __ get & __set sihirli yöntemler bunu yapmaz.
Yani burada işe nasıl bir örnek:
class PropTest extends PropertyHandler
{
public function __construct()
{
parent::__construct();
}
}
$props = new PropTest();
$props->setFirstName("Mark");
echo $props->getFirstName();
PropTest aslında "setFirstName" veya "getFirstName" yöntemleri içermiyor ve PropertyHandler yapar ne dikkat edin. Yapıyor tüm dizi değerlerini manipüle olduğunu.
Alt sınıf zaten başka bir şey uzanan olduğu diğer durum olurdu. Eğer PHP gerçek çoklu mirası olamaz beri, sizin alt sınıf özel bir değişken olarak bir PropertyHandler örneği var yapabilirsiniz. Sen bir daha işlev eklemek zorunda ama sonra işler tam olarak aynı şekilde davranır.
class PropTest2
{
private $props;
public function __construct()
{
$this->props = new PropertyHandler();
}
public function __call($method, $arguments)
{
return $this->props->__call($method, $arguments);
}
}
$props2 = new PropTest2();
$props2->setFirstName('Mark');
echo $props2->getFirstName();
Alt sınıf sadece PropertyHandler __ çağrı yöntemine boyunca her şeyi geçer bir __ çağrı yöntemi vardır nasıl fark.
Taşıma alıcılar ve ayarlayıcıları karşı başka iyi bir argüman bu yolu belgelemek için gerçekten zor hale olmasıdır.
Aslında, bu belgelendi yok edilecek açık yöntemler yoktur beri belge üretme aracı her türlü kullanabilirsiniz temelde imkansız.
Ben hemen hemen şimdi bu yaklaşımı terk ettik. Bu ilginç bir öğrenme bir egzersiz oldu ama ben çok fazla netlik feda düşünüyorum.