/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Implicit this-> ?
Fra : Stefan Kristensen


Dato : 29-12-09 18:36

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 (29-12-2009)
Kommentar
Fra : Peter Farsinsen


Dato : 29-12-09 19:01

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

Stefan Kristensen (29-12-2009)
Kommentar
Fra : Stefan Kristensen


Dato : 29-12-09 19:20

>>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 (29-12-2009)
Kommentar
Fra : Stefan Kristensen


Dato : 29-12-09 19:32


> 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 (29-12-2009)
Kommentar
Fra : Bertel Lund Hansen


Dato : 29-12-09 20:21

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.

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

Stefan Kristensen (29-12-2009)
Kommentar
Fra : Stefan Kristensen


Dato : 29-12-09 20:44

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 (31-12-2009)
Kommentar
Fra : Peter Farsinsen


Dato : 31-12-09 12:50

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 (31-12-2009)
Kommentar
Fra : Stefan Kristensen


Dato : 31-12-09 13:39

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

Bertel Lund Hansen (29-12-2009)
Kommentar
Fra : Bertel Lund Hansen


Dato : 29-12-09 19:06

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/

Daniel Egeberg (01-01-2010)
Kommentar
Fra : Daniel Egeberg


Dato : 01-01-10 12:09

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.

Stefan Kristensen (05-01-2010)
Kommentar
Fra : Stefan Kristensen


Dato : 05-01-10 10:42

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

Martin (03-01-2010)
Kommentar
Fra : Martin


Dato : 03-01-10 19:15

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


N/A (05-01-2010)
Kommentar
Fra : N/A


Dato : 05-01-10 10:42



Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408914
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste