Ankündigung

Einklappen
Keine Ankündigung bisher.

Abfrageergebnis auf Objekt mappen

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Abfrageergebnis auf Objekt mappen

    Hallo,

    ich bin noch neu in PHP (komme von Java/C#) und möchte mir bei einer Abfrage gleich ein Objekt zurückgeben lassen anstelle eines Arrays.

    Das zu mappende Objekt:
    PHP-Code:
    <?php
    class Product{
        private 
    $_id;
        private 
    $_name;
        private 
    $_description;
        private 
    $_category;
        private 
    $_price;
        
        public function 
    __construct(){
            
        }
        
        public function 
    __construct($name$description$category$price){
            
    $this->_name $name;
            
    $this->_description $description;
            
    $this->_category $category;
            
    $this->_price $price;        
        }
        
        public function 
    getName(){
            return 
    $this->_name;
        }
        
        public function 
    setName($newName){
            
    $this->_name $newName;
        }
        
        public function 
    getDescription(){
            return 
    $this->_description;        
        }
        
        public function 
    setDescription($newDescription){
            
    $this->_description $newDescription;
        }
        
        public function 
    getCategory(){
            return 
    $this->_category;
        }
        public function 
    setCategory($newCategory){
            
    $this->_category $newCategory;
        }
        
        public function 
    getPrice(){
            return 
    $this->_price;
        }
        
        public function 
    setPrice($newPrice){
            
    $this->_price $newPrice;
        }
        
    }

    ?>
    Connector:
    PHP-Code:
    <?php
    class Connector{

        static function 
    executeQuery($query){
            
    $conString mysql_connect("localhost","root")
            or die(
    "keine Verbindung möglich");
            
            
    mysql_select_db("munin") or die("Die Datenbank existiert nicht");    
            return 
    mysql_query($query);
        }
    }

    ?>
    index.php:
    PHP-Code:
    <?php
    require 'Connector.php';
    require 
    'Domain/Product.php';
    $result Connector::executeQuery("SELECT * FROM product");


    while(
    $row mysql_fetch_object($resultProduct,"name","description","category""price" )){
    echo 
    $row;
    };
    ?>
    Momentan kritisiert er meinen Konstruktor im Product-Objekt:
    Fatal error: Cannot redeclare Product::__construct() in C:\xampp\htdocs\workspace\Munin\Domain\Product.php on line 13

    Entferne ich den Konstruktor, kommt dies:
    Notice: Use of undefined constant Product - assumed 'Product' in C:\xampp\htdocs\workspace\Munin\index.php on line 7

    Warning: mysql_fetch_object() expects at most 3 parameters, 6 given in C:\xampp\htdocs\workspace\Munin\index.php on line 7



    Frage 1:
    Gibt es in PHP keine Konstruktor-Überladung?

    Frage 2:
    Ich verstehe die Fehlermeldung, aber ich weiß nicht, wie ichs beheben kann. Wie sage ich dem Interpreter, dass er mir ein Objekt vom Typ Produkt erzeugen soll und die Spaltennamen den jeweiligen Attributen zuordnen soll? Ohne das ganze "per Hand" zu machen; Die Funktion mysql_fetch_object gibts ja bestimmt nicht aus Spaß und Langeweile...

    Frage 3:
    Gibt es in PHP Properties o.ä.? Ich finde es etwas mühselig, für jedes Attribut getter und setter per Hand zu schreiben, finde aber in Eclipse auch keine Encapsulate-Funktion o.ä.. Oder werden Attribute schlicht nicht gekapselt?
    (in C# kann ich z.B. schreiben:
    Code:
    public string Name {get;set;}
    //oder
    
    private string _name;
    public string Name
    {
    get{return _name;}
    set{_name = value};
    }


  • #2
    Doctrine2?
    Standards - Best Practices - AwesomePHP - Guideline für WebApps

    Kommentar


    • #3
      1. überladen gibts gar nicht
      2.1 den Namen der Klasse als String übergeben
      2.2 gar nicht, der Spaltenname wird als Property genommen
      3. nein, es gibt zwar magische Methoden (__get und __set) da fehlt dann aber der IDE Support

      Willkommen bei PHP


      PS: Die mysql_ Erweiterung ist depracted... PDO oder mysqli_ sind zu verwenden.

      Kommentar

      Lädt...
      X