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