下記のようにpdo_connect
の親クラスに存在するクラスを 承継した子クラスをインスタンス化して呼び出したいのですが、うまく実装することができません。調べてみると「子クラスのメソッドの中でparent変数を使い、親クラスのメソッドが呼べる」ことが
わかったため、pdo_connect_exe
のとおり実装しました。
そして、main.phpにおいて$pdo->select($sql);
として結果、以下のerrorが出力されました。
Declaration of pdo_connect_exe::select() should be compatible with pdo_connect::select($sql)
宣言された子クラスのメソッドは親クラスと互換性があるべきと解釈できるのですが、具体的にどの点において互換性が維持できていないのかわからず、お尋ねさせていただきたく投稿させていただきました。
よろしくお願い申し上げます。
php
1//class.php 2class pdo_connect 3{ 4 const DB_NAME=''; 5 const HOST=''; 6 const UTF='utf8'; 7 const USER=''; 8 const PASS=''; 9 10 public function pdo(){ 11 $dsn="mysql:dbname=".self::DB_NAME.";host=".self::HOST.";charset=".self::UTF; 12 $user=self::USER; 13 $pass=self::PASS; 14 try{ 15 $pdo=new PDO($dsn,$user,$pass, 16 array( 17 PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, 18 PDO::ATTR_EMULATE_PREPARES => false, 19 ) 20 ); 21 }catch(Exception $e){ 22 echo 'error : ' .$e->getMessage(); 23 die(); 24 } 25 $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); 26 return $pdo; 27 } 28 public function select($sql){ 29 $hoge=$this->pdo(); 30 $stmt=$hoge->query($sql); 31 $items=$stmt->fetchAll(PDO::FETCH_ASSOC); 32 return $items; 33 } 34 35} 36class pdo_connect_exe extends pdo_connect 37{ 38 const DB_NAME='test_db'; 39 const HOST='localhost:XXXX'; 40 const UTF='utf8'; 41 const USER='root'; 42 const PASS='root'; 43 44 public function select(){ 45 parent::select(); 46 } 47 48}
php
1//main.php 2require_once("class.php") 3$pdo = new pdo_connect_exe(); 4$sql = "SELECT * FROM test_table"; 5$pdo->select($sql); 6コード
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/06/25 22:16 編集
2021/06/25 22:20 編集
2021/06/25 22:26
2021/06/25 22:27
2021/06/25 22:47 編集
2021/06/25 22:47
2021/06/26 00:20
2021/06/26 01:31
2021/06/26 01:44
2021/06/26 02:12
2021/06/26 02:34
2021/06/26 08:43 編集
2021/06/26 08:51 編集
2021/06/26 08:55
2021/06/26 09:01
2021/06/26 09:08
2021/06/26 10:18
2021/06/26 11:06
2021/06/26 16:12