<?phpclass ShopProduct{ private $id = 0; private $title; private $producerMainName; private $producerFirstName; protected $price; private $discount = 0; function __construct($title,$firstName,$mainName,$price){ $this->title = $title; $this->producerMainName = $mainName; $this->producerFirstName = $firstName; $this->price = $price; } function setDiscount($num){ $this->discount = $num; } function getDiscount(){ return $this->discount; } function getTitle(){ return $this->title; } function getProducerFirstName(){ return $this->producerFirstName; } function getProducerMainName(){ return $this->producerMainName; } function getId(){ return $this->id; } function setId($id){ $this->id = $id; } function static getInstance($id,PDO $pdo){ $stmt = $pdo->prepare("select * from products_4 where id =?"); $result = $stmt->execute(array($id)); $row = $stmt->fetch(); if(empty($row)){ return null; } if($row['type']=='book'){ $product = new BookProduct( $row['title'],$row['firstname'],$row['mainname'],$row['price'],$row['numpages'] ); } elseif($row['type']=='cd') { $product = new CdProduct( $row['title'],$row['firstname'],$row['mainname'],$row['price'],$row['playlength'] ); } else{ $product = new ShopProduct( $row['title'],$row['firstname'],$row['mainname'],$row['price'] ); } $product->setId($row['id']); $product->getDiscount($row['discount']); return $product; } function getPrice(){ return "({$this->price} - {$this->discount})"; } function getProducer(){ return "{$this->producerFirstName}". " {$this->producerMainName}"; } function getSummaryLine(){ $base = "{$this->title} ( {$this->producerMainName}"; $base .= " {$this->producerFirstName} )"; return $base; }}class CdProduct extends ShopProduct{ private $playLength = 0; function __construct($title,$firstName,$mainName,$price,$playLength){ parent::__construct($title,$firstName,$mainName,$price); $this->playLength = $playLength; } function getSummaryLine(){ $base = parent::getSummaryLine(); $base .= ": playing - time {$this->playLength}"; return $base; }}class BookProduct extends ShopProduct{ private $numPages = 0 ; function __construct($title,$firstName,$mainName,$price,$numPages){ parent::__construct($title,$firstName,$mainName,$price); $this->numPages = $numPages; } function getNumPages(){ return $this->numPages; } function getSummaryLine(){ $base = parent::getSummaryLine(); $base .= ": page count - {$this->numPages}"; return $base; } function getPrice(){ return $this->price; }}$dsn = "mysql:host=localhost;dbname=test";try{ $pdo = new PDO($dsn,"root","root"); $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); $obj = ShopProduct::getInstance(1,$pdo);}catch(PDOException $e){ echo $e->getMessage();}print_r($obj);
関数 static は逆に書かれています。
static 関数
function static は逆に書かれています。
static function
たぶん、それは常識です!
static function getInstance($id,PDO $pdo){
static は関数を変更します。つまり、getInstance という名前の関数は static
であり、 function static getInstance( $id, PDO $pdo){
static の位置が間違っていることは言うまでもありません
関数の後には関数名が続く必要がありますが、static getInstance でよいでしょうか?
関数名を 2 つの部分に分割することはできません。これは文法的ではありません。
たぶん、それは常識です。
static function getInstance($id,PDO $pdo){
static は関数を変更します。つまり、getInstance という名前の関数は static
であり、 function static getInstance( $id, PDO $pdo){
static の位置が間違っていることは言うまでもありません
関数の後には関数名が続く必要がありますが、static getInstance でよいでしょうか?
関数名を 2 つの部分に分割することはできません。文法的ではありません。
function static getInstance は static function getInstance に変更されます。
static は修飾子であり、文法規則に従って、変更された変数またはメソッドの前に記述する必要があります。