Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Hvad betyder ->

12 views
Skip to first unread message

Jens R. Rasmussen

unread,
Feb 3, 2013, 1:20:59 PM2/3/13
to
Hej PHP-hajer/

Jeg er ganske ny i php. Har itv. kodet i asp, men nu beder en ven om hjælp til hans web-sider, der er kodet i php.
Læste derfor lidt om sproget på php.net - og det ligner jo asp til forveksling.

Men jeg forstår ikke hvad "->" betyder, og jeg kan ikke finde en forklaret i manualen på php.net. Så hvad gør denne operator?
Eksempler fra den kode jeg forsøger at forstå:

1) while ($db->fetch($menu, MYSQL_ASSOC))

2) $db->initialize();

3) $this->numQuery++;

Og jeg kunne blve ved. Mærkeligt at jeg ikke kan finde en definition på operatoren ->

Kan I hjælpe, please?

mvh.

nybegynderen (Jens)



Anders Wegge Keller

unread,
Feb 3, 2013, 1:26:06 PM2/3/13
to
Den peger ind i et instantieret objekt. Du bliver formentlig klogere,
hvis du læser OO-afsnittet af manualen igennem:
<http://www.php.net/manual/en/language.oop5.php>

--
/Wegge

Leder efter redundant peering af dk.*,linux.debian.*

Jens R. Rasmussen

unread,
Feb 3, 2013, 1:58:05 PM2/3/13
to
Hej Anders/

tak for hurtigt svar. Desværre er jeg en tumpe!
Jeg havde skimmet ovenstående link - og har nu skimmet det igen - men jeg kan IKKE finde en forklaring på ->
Det er som om alle ved hvad -> betyder før man læser kapitlerne.
Det første simple eksempel
class SimpleClass
{
// property declaration
public $var = 'a default value';

// method declaration
public function displayVar() {
echo $this->var;
}
}

gør mig ikke klogere. Der defines åbenbart en Class med variablen var, der kan ses uden for Class; og variablen gives værdien "a default value"

Så er der den offentlige funktion displayvar()- som skriver...?hvad?. Tilsyneladende indeholdet af $var, som ikke længere har sin oprindelige værdi men er ændret af funktionen $this.
Hvis det er rigtigt forstået, hvorfor skriver man så ikke bare i funktionen
$var = $this;
echo $var

Hvad er forskellen på de 2 måder at skrive på?

mvh
Jens

Asger Joergensen

unread,
Feb 3, 2013, 2:17:07 PM2/3/13
to
Hej Jens

Hvis du skal have fat i noget af det der er inde i et object s�
skal du bruge pilen for at addresserer det:

object->MedlemAfObject

Lige som i C++

Der er mere info her:
http://stackoverflow.com/questions/3737139/reference-what-does-this-symbol-mean-in-php

Venlig hilsen
Asger-P

http://Asger-P.dk/trapper
http://Asger-P.dk/software

Bertel Lund Hansen

unread,
Feb 3, 2013, 3:21:42 PM2/3/13
to
Jens R. Rasmussen skrev:

> Men jeg forst�r ikke hvad "->" betyder, og jeg kan ikke finde
> en forklaret i manualen p� php.net. S� hvad g�r denne
> operator?

En klasse er en samling elementer. Den kan omfatte b�de variable
og funktioner. Klassen har et navn.

N�r man s� skal bruge klassen, opretter man et objekt. Du kan
t�nke p� klassedefinitionen som en slags opskrift, og s� laves
objektet efter den opskrift. Ved oprettelsen tildeler man
objektet et navn.

N�r man s� skal tilg� elmenterne i objektet, s� bruger
[objektnavn] + [->] + [elementnavn]. Et eksempel:

class Cat () {
var $name
var $sex
var $colour
var $age
var $position

function Cat ($nm,$sx,$cl) {
$this->name=$nm);
$this->sex=$sx);
$this->colour=$cl);
$this-age=0;
$this-position=array(0,0,0);
}

function move ($steps,$direction) {
kode til bev�gelse ...
}

function jump ($height,$length,$direction) {
kode til spring ...
}
function display_position () {
foreach ($this-position as $val) echo $val.' ';
}

}

Nu kan vi s� oprette et objekt:

$mis=Cat('Missi',0,'black');
P� det her tidspunkt er objektet $mis oprettet, og det f�r s�
automatisk et s�t variable og et s�t funktioner. N�r de skal
bruges, skal vi specificere objektets navn (der kan jo v�re mange
objekter af den samme klasse), og vi skal specificere varablen
eller funktionen:

$mis->move(5,'nord');
$mis->jump(100,30,'syd');
$mis->display_position();
osv.

L�g m�rke til at man inden i definitionen af klasse jo ikke ved
hvad objektet (eller objekterne) kommer til at hedde. Det
fastl�gges f�rst n�r de oprettes. Derfor bruger man "$this" som
generisk betegnelse, og den f�r man brug for n�r man i
funktionerne skal henvise til klassens egne elementer.

Hvis jeg i stedet for "$this-position" blot havde skrevet
"$position", ville systemet have ledt efter en global variabel
der hed "$position" og den findes ikke - eller endnu v�rre: Den
findes og giver nogle helt andre resultater end det er meningen!
Kun ved at bruge $this-> fort�ller jeg systemet at det er
klassevariablen "position" der refereres til.

--
Bertel
http://bertel.lundhansen.dk/ http://fiduso.dk/

Jens R. Rasmussen

unread,
Feb 4, 2013, 4:16:00 AM2/4/13
to
Den søndag den 3. februar 2013 21.21.42 UTC+1 skrev Bertel Lund Hansen:
> Jens R. Rasmussen skrev:
>
>
>
> > Men jeg forstår ikke hvad "->" betyder, og jeg kan ikke finde
>
> > en forklaret i manualen på php.net. Så hvad gør denne
>
> > operator?
>
>
>
> En klasse er en samling elementer. Den kan omfatte både variable
>
> og funktioner. Klassen har et navn.
>
>
>
> Når man så skal bruge klassen, opretter man et objekt. Du kan
>
> tænke på klassedefinitionen som en slags opskrift, og så laves
>
> objektet efter den opskrift. Ved oprettelsen tildeler man
>
> objektet et navn.
>
>
>
> Når man så skal tilgå elmenterne i objektet, så bruger
>
> [objektnavn] + [->] + [elementnavn]. Et eksempel:
>
>
>
> class Cat () {
>
> var $name
>
> var $sex
>
> var $colour
>
> var $age
>
> var $position
>
>
>
> function Cat ($nm,$sx,$cl) {
>
> $this->name=$nm);
>
> $this->sex=$sx);
>
> $this->colour=$cl);
>
> $this-age=0;
>
> $this-position=array(0,0,0);
>
> }
>
>
>
> function move ($steps,$direction) {
>
> kode til bevægelse ...
>
> }
>
>
>
> function jump ($height,$length,$direction) {
>
> kode til spring ...
>
> }
>
> function display_position () {
>
> foreach ($this-position as $val) echo $val.' ';
>
> }
>
>
>
> }
>
>
>
> Nu kan vi så oprette et objekt:
>
>
>
> $mis=Cat('Missi',0,'black');
>
> På det her tidspunkt er objektet $mis oprettet, og det får så
>
> automatisk et sæt variable og et sæt funktioner. Når de skal
>
> bruges, skal vi specificere objektets navn (der kan jo være mange
>
> objekter af den samme klasse), og vi skal specificere varablen
>
> eller funktionen:
>
>
>
> $mis->move(5,'nord');
>
> $mis->jump(100,30,'syd');
>
> $mis->display_position();
>
> osv.
>
>
>
> Læg mærke til at man inden i definitionen af klasse jo ikke ved
>
> hvad objektet (eller objekterne) kommer til at hedde. Det
>
> fastlægges først når de oprettes. Derfor bruger man "$this" som
>
> generisk betegnelse, og den får man brug for når man i
>
> funktionerne skal henvise til klassens egne elementer.
>
>
>
> Hvis jeg i stedet for "$this-position" blot havde skrevet
>
> "$position", ville systemet have ledt efter en global variabel
>
> der hed "$position" og den findes ikke - eller endnu værre: Den
>
> findes og giver nogle helt andre resultater end det er meningen!
>
> Kun ved at bruge $this-> fortæller jeg systemet at det er
>
> klassevariablen "position" der refereres til.
>
>
>
> --
>
> Bertel
>
> http://bertel.lundhansen.dk/ http://fiduso.dk/

Tak Bertel for din meget forståelige forklaring. Den burde stå forrest i manualen :-).
Min forvirring skyldes, at jeg intuitivt (og forkert) opfattede A->B som en handling, der flyttede værdier fra A til B. Jeg så ikke, at B er et element i A, og at A->B derfor er en adresse på element B i A

mvh.
/Jens

J�rn Andersen

unread,
Feb 8, 2013, 2:51:13 AM2/8/13
to
On Sun, 3 Feb 2013 10:20:59 -0800 (PST), "Jens R. Rasmussen"
<jens.r.ra...@gmail.com> wrote:

>Men jeg forst�r ikke hvad "->" betyder

En anden, kort, forklaring.

Det betyder det samme som punktummet i:
Response.Write
i ASP.

Good luck,
J�rn

--
J�rn Andersen
http://socialister.dk
http://marxisme.dk
0 new messages