Ik ben gisteren begonnen met het maken van een `Business Objects` raamwerk. Alleen ben ik er snel achter gekomen da PHP niet echt een 4de generatie programmeer taal is. Volgens de handleiding van PHP zijn eigenschappen `variabele` die private, protected of public zijn. Nu is dit bij C++, Delphi, .Net, niet het geval natuurlijk.
Daar zijn properties 2 functies: de get en set functie van een property:
voorbeeld:
class cTest1 {
public Test = 1;
}
class cTest2 extends cTest1 {
private Number = 1;
public function setTest($Value) { $this->Number += (int) $Value; }
public function getTest() { return (int) $this->Number; }
}
Maar nu moet ik steeds zelf de get en set gaan aanroepen. i.p.v. het systeem dit zelf uitzoekt... Tevens kan ik de `TEST` in de parent class nu niet overschrijven?
Ik heb het nu opgelost door:
class cTest extends cBO_Framework {
protected $Test = 1;
public function _setTest($Value) {
// Data validatie & conversie
}
public function _getTest($Value) {
// Data conversie (bv: HTMLDecode...)
}
}
In het framework zit een __get en __set magic function.... die de aanvraag doorlust aan _get$Property en _get$Property.
Hierdoor kan ik dus een PRIVE waarde PUBLIEK benaderen door middel van get en set functies...
Dus:
$Test = New cTest();
$Test->Test = 100; ->> $Test->_setTest($Value);
echo $Test->Test; ->> $Test->_getTest();
Weet iemand een ander idee hoe je dit kunt maken, uit eindelijk wil ik er bijvoorbeeld dit mee doen:
class cBO_DB_Field_Varchar extends cBO_DB_Field {
protected $MaxLength = null;
public function __construct($BO, $Field, $Name, $Label = false, $Default = null, $MaxLength = 255) {
parent::__construct($BO, $Field, $Name, $Label, $Default);
$this->MaxLength = $MaxLength;
}
public function Cast(cBO_DB_Field_Varchar &$Object) { return $Object; }
public function MaxLength() { return $this->MaxLength; }
public function getValue() { return htmlspecialchars_decode(parent::getValue($this->Value));}
public function setValue($Value) { parent::setValue(htmlspecialchars($Value)); }
}