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