NEWBEE: OOP Lokale variabele

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Roger Keulen

Roger Keulen

28/10/2009 13:16:00
Quote Anchor link
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.
 
PHP hulp

PHP hulp

22/02/2025 21:50:43
 
Roger Keulen

Roger Keulen

28/10/2009 13:54:00
Quote Anchor link
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?

Gelieve Niet Bumpen::
Twee of meer keer achter elkaar in een topic posten heet bumpen. Bumpen is pas na 24 uur toegestaan en kan een reden zijn voor de admins en moderators om een topic te sluiten. Gebruik indien nodig de Afbeelding knop om je tekst aan te passen.

SanThe.
Gewijzigd op 01/01/1970 01:00:00 door Roger Keulen
 
TJVB tvb

TJVB tvb

28/10/2009 13:58:00
Quote Anchor link
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.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
class Voorbeeld
{
//  private $a = 'test';
  private $test = 'doei';
  
//  public function __construct()
  public function voorbeeldFunctie()
  {

    $a = 'test';
    $this->$a = 'hoi';
    echo $this->test; //geef als tekst: hoi
  }
}

?>


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
 
Jelmer -

Jelmer -

29/10/2009 18:50:00
Quote Anchor link
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.
 
Roger Keulen

Roger Keulen

31/10/2009 14:42:00
Quote Anchor link
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
 
Jelmer -

Jelmer -

31/10/2009 15:06:00
Quote Anchor link
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.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$person
->setNickname($field->value());
// ipv
$person->nickname = $field->value;
?>
 
Roger Keulen

Roger Keulen

31/10/2009 18:22:00
Quote Anchor link
Jah, zo heb ik het nu ook opgelost...

Werkt ook prima trouwens, alleen de code had anders wat 'mooier' uitgezien.

Thanx... en groetjes: Lucifer
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.