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

Implicit this-> ?

0 views
Skip to first unread message

Stefan Kristensen

unread,
Dec 29, 2009, 12:35:55 PM12/29/09
to
Jeg er ved at l�re PHP og er st�dt p� en udfordring:

class Tile{
private $x=0;
private $y=5;
function __construct($dx){
$this->x = $this->y + $dx;
}
}

Dette virker, men min Tile klasse har 16 properties - Det bliver til en
del $this->, der fylder lidt i koden. Kan man g�re $this-> implicit p�
en eller anden m�de?

Og s� vil jeg gerne definere
private $z = $y * 5;
men det m� jeg ikke. Hvordan skal jeg g�re det for ikke at f� fejl?

Mvh
Stefan

Peter Farsinsen

unread,
Dec 29, 2009, 1:01:07 PM12/29/09
to
Stefan Kristensen wrote:
> Dette virker, men min Tile klasse har 16 properties - Det bliver til en
> del $this->, der fylder lidt i koden. Kan man g�re $this-> implicit p�
> en eller anden m�de?

Nej.

> Og s� vil jeg gerne definere
> private $z = $y * 5;
> men det m� jeg ikke. Hvordan skal jeg g�re det for ikke at f� fejl?

G�r det i din constructor ;)

- Peter

Bertel Lund Hansen

unread,
Dec 29, 2009, 1:05:41 PM12/29/09
to
Stefan Kristensen skrev:

> Dette virker, men min Tile klasse har 16 properties - Det bliver til en
> del $this->, der fylder lidt i koden. Kan man g�re $this-> implicit p�
> en eller anden m�de?

Ikke mig bekendt.

> Og s� vil jeg gerne definere
> private $z = $y * 5;
> men det m� jeg ikke. Hvordan skal jeg g�re det for ikke at f� fejl?

<?


class Tile{
private $x=0;
private $y=5;

private $z;

function __construct($dx){
$this->z = $this->y * 5;


$this->x = $this->y + $dx;
}
}

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

Stefan Kristensen

unread,
Dec 29, 2009, 1:20:00 PM12/29/09
to
>>Kan man g�re $this-> implicit p� en eller anden m�de?
>
> Nej.
>
>> Og s� vil jeg gerne definere
>> private $z = $y * 5;
>> men det m� jeg ikke. Hvordan skal jeg g�re det for ikke at f� fejl?
>
> G�r det i din constructor ;)

Tak Peter og Bertel.

N�ste sp�rgsm�l:

Jeg har nogle objekter, $T1, $T2, $T3 og s� fremdeles.
Hvordan laver jeg en l�kke, der kalder den samme funktion p� disse objekter?

for($i=1; $i<6; $i++)
$img = $img . $T$i->draw();

virker naturligvis ikke, men hvad g�r s�?

Mvh
Stefan

Stefan Kristensen

unread,
Dec 29, 2009, 1:32:21 PM12/29/09
to

> Jeg har nogle objekter, $T1, $T2, $T3 og s� fremdeles.
> Hvordan laver jeg en l�kke, der kalder den samme funktion p� disse
> objekter?
>
> for($i=1; $i<6; $i++)
> $img = $img . $T$i->draw();
>
> virker naturligvis ikke, men hvad g�r s�?
>

En l�sning kunne v�re at lave et array med objekterne, og s� bruge foreach.
Men kan man lave noget der ligner ovenst�ende?

Mvh
Stefan

Bertel Lund Hansen

unread,
Dec 29, 2009, 2:20:34 PM12/29/09
to
Stefan Kristensen skrev:

> En l�sning kunne v�re at lave et array med objekterne, og s� bruge foreach.

Brug den.

> Men kan man lave noget der ligner ovenst�ende?

Ja, men det er klamp.

Det er muligt at tr�kke en v�rdi ud af PHP, knytte den til et $
og derved f� opbygget et variabelnavn, men det vil jeg frar�de
fordi det er sv�rt gennemskueligt.

N�r f�rst du har pr�vet at vende tilbage til din egen kode efter
3 m�neder, s� vil du s�tte pris p� at der ikke er lavet den slags
krumspring.

Stefan Kristensen

unread,
Dec 29, 2009, 2:43:36 PM12/29/09
to
Bertel Lund Hansen wrote:
> Stefan Kristensen skrev:
>
>> En l�sning kunne v�re at lave et array med objekterne, og s� bruge foreach.
>
> Brug den.
>
>> Men kan man lave noget der ligner ovenst�ende?
>
> Ja, men det er klamp.
>
> Det er muligt at tr�kke en v�rdi ud af PHP, knytte den til et $
> og derved f� opbygget et variabelnavn, men det vil jeg frar�de
> fordi det er sv�rt gennemskueligt.
>
> N�r f�rst du har pr�vet at vende tilbage til din egen kode efter
> 3 m�neder, s� vil du s�tte pris p� at der ikke er lavet den slags
> krumspring.
>

Ok - Tak for hj�lpen.
Jeg vender frygteligt tilbage n�r jeg l�ber ind i nye udfordringer :-)

Mvh
Stefan

Peter Farsinsen

unread,
Dec 31, 2009, 6:49:32 AM12/31/09
to
Stefan Kristensen wrote:

>> for($i=1; $i<6; $i++)
>> $img = $img . $T$i->draw();

> En l�sning kunne v�re at lave et array med objekterne, og s� bruge foreach.


> Men kan man lave noget der ligner ovenst�ende?

$obj = "T1";
$img = ${$obj}->draw();

Burde faktisk virke, men det er rigtig grimt i dit tilf�lde. Problemet
er at data og logik bliver blandet sammen i dit tilf�lde. Lav i stedet
en funktion der forventer et array og er ligeglad med, hvad dine
variable hedder.

- Peter

Stefan Kristensen

unread,
Dec 31, 2009, 7:39:19 AM12/31/09
to
> $obj = "T1";
> $img = ${$obj}->draw();
>
> Burde faktisk virke, men det er rigtig grimt i dit tilf�lde.

Ja, det forst�r jeg, jeg var ogs� mere nysgerrig.
Nu har du stillet min nysgerrighed, og tak for det :-)

Godt nyt�r til alle.

Mvh
Stefan

Daniel Egeberg

unread,
Jan 1, 2010, 2:08:57 PM1/1/10
to
On Dec 29 2009, 7:20 pm, Stefan Kristensen <j...@mad.dk> wrote:
> Jeg har nogle objekter, $T1, $T2, $T3 og så fremdeles.
> Hvordan laver jeg en løkke, der kalder den samme funktion på disse objekter?

>
> for($i=1; $i<6; $i++)
>    $img = $img . $T$i->draw();
>
> virker naturligvis ikke, men hvad gør så?

Du kan gøre følgende:

for ($i = 1; isset(${'T' . $i}); ++$i) {
${'T' . $i}->draw();
}

Det er naturligvis meget smartere at definere en array. Denne datatype
er *netop* beregnet til dette formål.

Martin

unread,
Jan 3, 2010, 1:15:09 PM1/3/10
to
On 29-12-2009 18:35, Stefan Kristensen wrote:
> Jeg er ved at l�re PHP og er st�dt p� en udfordring:
>
> class Tile{
> private $x=0;
> private $y=5;
> function __construct($dx){
> $this->x = $this->y + $dx;
> }
> }
>
> Dette virker, men min Tile klasse har 16 properties - Det bliver til en
> del $this->, der fylder lidt i koden. Kan man g�re $this-> implicit p�
> en eller anden m�de?

du kan bruge __set og __get

Fx

class T
{

private $data = array();

public function __set($v, $data)
{
$this->data[$v] = $data;
}

public function __get($v)
{
return $this->data[$v];
}


}

$obj = new T;
$obj->t = 'Hello world';
echo $obj->t; // Hello world


>
> Og s� vil jeg gerne definere
> private $z = $y * 5;
> men det m� jeg ikke. Hvordan skal jeg g�re det for ikke at f� fejl?

Kan man ikke
Variabler er "statiske" og kan ikke udregnes, men du kan jo lave dine
udregninger i din konstrukt�r

function __construct($dx)
{
$this->x = $this->y + $dx;

$this->z = $this->y * 5;
}

>
> Mvh
> Stefan

Stefan Kristensen

unread,
Jan 5, 2010, 4:41:37 AM1/5/10
to
>> for($i=1; $i<6; $i++)
>> $img = $img . $T$i->draw();
>>
>> virker naturligvis ikke, men hvad g�r s�?
>
> Du kan g�re f�lgende:

>
> for ($i = 1; isset(${'T' . $i}); ++$i) {
> ${'T' . $i}->draw();
> }


Ah, der skulle {} uden om.
Tak for det gode eksempel.

Mvh
Stefan

0 new messages