kostenloser Webspace werbefrei: lima-city


PHP funktionen staffeln ( $obj->f1()->f2(); )

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    goldeneye

    Kostenloser Webspace von goldeneye

    goldeneye hat kostenlosen Webspace.

    Hallo ihr.
    Wollte mal anfragen, wie man mehrere funktionen einer Klasse staffeln kann. Wollte mir einen kleinen SQL- helper schreiben, der nach diesem Konzept funktionieren soll:
    <?php
    $sql->select('*')->from('test')->where("'id' = 3 ");
    ?>

    Nun habe ich die Klasse bisher wie folgt erstellt:

    <?php
    class sql {
    	private $mini_sql;
    
    	//----------------------------------------------------------------
    	//------------ MINI SQL --> dont use!!! buggy
    	//----------------------------------------------------------------
    	
    	public function select($str=false) {
    		$this->array_query['select'] = (!empty($str)) ? $str : '*';
    	}
    	
    	public function from($str=false) {
    		$this->array_query['from'] = (!empty($str)) ? $str : '';
    		$this->mini_sql = true;
    		return (object) 'foo';
    	}
    	
    	public function where($str= false) {
    		$this->array_query['where'] = (!empty($str)) ? $str : '';
    	}
    	
    	public function order($str= false) {
    		$this->array_query['order'] = (!empty($str)) ? $str : '';
    	}
    	
    	private function min_sql()
    	{
    		$this -> sLastQuery = "SELECT " . $this->array_query['select'] . " FROM " . $this->array_query['from'];
    		$this -> sLastQuery .= (!empty($this->array_query['where']))? ' WHERE '.$this->array_query['where'] : '';
    		$this -> sLastQuery .= (!empty($this->array_query['order']))? ' ORDER BY '.$this->array_query['order'] : '';
    
    		$this -> obj = $this -> sDBLink -> prepare($this -> sLastQuery);
    	}
    
    }
    ?>

    Was den Fehler: "Fatal error: Call to a member function from() on a non-object" zurückgibt.
    Bei der Suche im netz habe ich leider nur die Möglichkeit gefunden, jede dieser funktionen als eigene Klasse zu hinterlegen, was aber einfach zu unpraktisch ist.

    Gibt es noch eine Möglichkeit um die oben beschriebene Klasse zum funktionieren zu kriegen, sodass der sql-query ordenlich erstellt wird?

    würde mich über tipps freuen
    Daniel
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. t*****b

    Ich kenn momentan den Fachbegriff nicht, das geht aber nur, wenn du auf Klassen "als Attribute" zugreifst:

    class Test {
     public $foo;
     
     function __construct() {
      $this->foo = new AndereKlasse();
     }
    
    }
    
    class AndereKlasse {
    
     public function test() {
      //
     }
    
    }


    Zugriff über

    $instanz = new Test();
    $instanz->foo->test();


    /Edit: Vielleicht gehts aber auch anders

    Beitrag zuletzt geändert: 21.6.2012 16:23:27 von trueweb
  4. g****e

    Ich hab da mal eine andere schreibweise gesehen, probiers mal so:
    $object->select()
        ->from()
        ->where();

    Das hatte ich mal irgendwo gesehen, so ein "Supercall" oder so.

    So wie du das gemacht hast möchte er die Rückgabewerte derefferenzieren, das willst du aber nicht. würde aber gehen, wenn jede Variable "return $this;" enthält. Also als beispiel:
    public function select($str=false) {
    	$this->array_query['select'] = (!empty($str)) ? $str : '*';
    	return $this;
    }


    Deine Sache.

    Liebe Grüße
  5. Autor dieses Themas

    goldeneye

    Kostenloser Webspace von goldeneye

    goldeneye hat kostenlosen Webspace.

    ggamee schrieb:
    So wie du das gemacht hast möchte er die Rückgabewerte derefferenzieren, das willst du aber nicht. würde aber gehen, wenn jede Variable "return $this;" enthält. Also als beispiel:
    public function select($str=false) {
    	$this->array_query['select'] = (!empty($str)) ? $str : '*';
    	return $this;
    }


    Deine Sache.

    Liebe Grüße


    Danke! Ist echt mal eine schöne Lösung und wird in Zukunft hoffentlich viel Schreibarbeit reduzieren :thumb:
    Werde die Klasse online stellen, sobald sie fertig ist, damit dann alle davon profitieren können :)

  6. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!