NEWBEE: OOP Lokale variabele
Mijn naam is Keulen en heb ooit 6/7 jaar geleden een opdracht gedaan met PHP. Nu wil ik graag weer eens met PHP gaan programmeren maar het is al weer lang geleden. Nu was ik met goede moed weer begonnen maar loop al heeeeeel snel vast. Het declareren van een classe is me al te veel. Kan iemand mij effe helpen, het zal wel een stomme fout van mij zijn....
class cHTTPRequest
{
private $http; <-- Deze variabele wil ik graag VULLEN !
public function __construct($aHTTPReturn = '')
{ $this->$http = $aHTTPReturn;
}
public function GetHTTPReturn() <-- HIER WIL IK HEM UITLEZEN !
{ return $this->$http;
}
}
Nu krijg ik een probleem met variabele $http not defined.... Maar zelfs maak ik $http 'PUBLIC' dan werkt het niet. Ik ben zelf delphi programmeur dus heb wel verstand van OOP maar blijkbaar teweinig verstand van PHP syntax.
Zie in de help van PHP dezelfde syntax staan. Ik heb php 5.3.0 geinstalleerd via wamp server.
Met vriendelijke groet: Keulen.
{
public static $http;
public function __construct($aHTTPReturn = '')
{ self::$http = $aHTTPReturn;
}
public function GetHTTPReturn()
{ return self::$http;
}
}
Hmm, Ik heb een werkende versie nu... Heb het woordje 'STATIC' toegevoegd. En van "$this->" nu maar eens "self::" van gemaakt. Gaat dit nog vaak veranderen?
Ik heb van een vriend het boek "PHP 5 voor gevorderden" gekregen, 2 jaar oud. Kan ik dit boek nu weg gooien?
Gelieve Niet Bumpen::
Gewijzigd op 01/01/1970 01:00:00 door Roger Keulen
self::$http; is voor static variabele, die zijn voor alle instanties van een classe hetzelfde.
Wat jij doe is een variabele variebele aanroepen;
b.v.
Code (php)
edit:
Even de code verbeterd naar aanleiding van het commentaar van de altijd oplettende Jelmer
Gewijzigd op 01/01/1970 01:00:00 door TJVB tvb
Anyway, wat je fout deed in je begin-post is $this->$a. Zie je? Je hebt nu 2 dollartekens. Zoals TJVB al opmerkt, je maakt nu gebruik van een trucje van PHP, variabele variabelen. $this->$a wordt vertaalt naar $this->test wanneer de waarde van $a 'test' is.
Wat TJVB zegt klopt niet helemaal, want binnen je __construct heb je geen variabele genaamd $a. Je hebt wel $this->a. $this->{$this->a} zou wel werken, maar dat soort constructies zal je waarschijnlijk niet snel gaan gebruiken.
Samenvatting: het is $this->http in plaats van $this->$http.
En het woordje 'static' heeft bij PHP toch echt een andere betekenis als bij DELPHI. Daar is heeft 'static' en 'dynamic' iets te maken hoe de functie in het geheugen wordt gebruikt en overerving.
Weet iemand ook of je bij PHP published properties hebt?
bv:
class cTest
{
private $prvMyVar;
public function getMyVar() {
return 'OPHALEN '.$prvMyVar;
public function setMyVar($aValue) {
$prvMyVar = 'OPSLAAN'.$aValue; }
published property $MyVar read getMyVar write setMyVar;
}
$oTest = new cTest;
Dus als je nu de variabele MyVar benaderd doe je eigenlijk een functie uitvoeren:
$oTest->MyVar = 'TEST' === dan: cTest-setMyVar('TEST')
$Var = $oTest->MyVar === dan: cTest-getMyVar();
Iemand ???
Bij 'inaccessible properties' lukt het namelijk wel met __set en __get maar ik wil dit ook kunnen bij bound-properties. Wil niet alles un-bound gaan maken omdat dit erg vertragend werkt.
Property overloading
__set() is run when writing data to inaccessible properties.
__get() is utilized for reading data from inaccessible properties.
__isset() is triggered by calling isset() or empty() on inaccessible properties.
__unset() is invoked when unset() is used on inaccessible properties.
Groetjes: Lucifer
Werkt ook prima trouwens, alleen de code had anders wat 'mooier' uitgezien.
Thanx... en groetjes: Lucifer