NEWBEE: OOP Lokale variabele
Hallo,
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.
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.
class cHTTPRequest
{
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?
{
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:
Gewijzigd op 01/01/1970 01:00:00 door Roger Keulen
Het is $this->http; bij gewone variabelen.
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.
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
Dat boek kan je houden. Het zal niet helemaal meer actueel zijn, en er zullen voor sommige dingen mooiere methodes zijn inmiddels, maar PHP is toch wel behoorlijk goed backwards compatible, wat inhoud dat je code volgens de regeltjes van 5 jaar geleden kan schrijven, en het zal nog werken.
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.
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.
Ja, ik heb het nu in de gaten.... wat ik fout deed.
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
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
Helaas, PHP heeft geen syntax sugar voor getters en setters behalve __get en __set. Daarom zal je in de meeste PHP code ook zien dat we eigenlijk nooit public properties, of properties van andere objecten direct benaderen, maar dat er altijd gebruik wordt gemaakt van methods.
Jah, zo heb ik het nu ook opgelost...
Werkt ook prima trouwens, alleen de code had anders wat 'mooier' uitgezien.
Thanx... en groetjes: Lucifer
Werkt ook prima trouwens, alleen de code had anders wat 'mooier' uitgezien.
Thanx... en groetjes: Lucifer





