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:
Connector:
index.php:
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:
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;
}
}
?>
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);
}
}
?>
PHP-Code:
<?php
require 'Connector.php';
require 'Domain/Product.php';
$result = Connector::executeQuery("SELECT * FROM product");
while($row = mysql_fetch_object($result, Product,"name","description","category", "price" )){
echo $row;
};?>
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}; }
Kommentar