Hallo,

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));    }
}

Reageren