では、以下のクラスを考えてみましょう。PhpStorm PDOStatementに警告
class output_Home {
public $app;
public $forums;
function __construct ($app) {
// main app class containing db, settings, etc
$this->app = $app;
// populate class property arrays for use in template
$this->setForums();
}
function setForums() {
/*
* select all forum data, dump into $this->forums array
* fields:
* id, name, slug, description, order,
* total_threads, total_posts,
* last_post_id, last_post_date, last_poster_id, last_poster_username, last_poster_avatar
*/
$sql = "select f.*,
p.id as last_post_id, p.date_created as last_post_date,
u.id as last_poster_id, u.username as last_poster_username, u.avatar as last_poster_avatar,
(select count(*) from `threads` where `id_forum`=f.id) as total_threads,
(select count(*) from `posts` where `id_forum`=f.id) as total_posts
from `forums` as f
left join `posts` as p on (p.id = (select `id` from `posts` where `id_forum`=f.id order by `date_created` desc limit 1))
left join `users` as u on (u.id = p.id_user)
order by f.order asc";
$stm = $this->app->db->prepare($sql);
$stm->execute();
$this->forums = $this->app->sanitizer->action('sanitize', $stm->fetchAll());
}
}
は私object_App
クラスである:ここでは
class object_App {
public $db;
function __construct() {
// create database "db" connection
$this->db = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME, DB_USER, DB_PASS);
$this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$this->db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
}
}
は$this->app
がoutput_Home
クラスに渡す方法です:
$app = new object_App();
$home = new output_Home($app);
$app
プロパティにはというプロパティが含まれています、これはPDOオブジェクトです。ここで特に$stm
変数に注目してください。
私の問題は、PhpStormから、$stm->execute()
などのメソッドがクラスに見つからないと主張しているということです。もちろん、彼らはPDOStatements
であるので、そうではありません。
警告を正しく取り除く方法があるかどうかだけを知りたいのですが、$stm
の上にPHPDocs
を使用せずに、私はいくつかの異なるクラスメソッドでかなりの数を作っています。コード内のどこでもPHPDocs
が必要です。
ご協力いただければ幸いです。
あなたの 'app-> db'はどのように定義されていますか?これまでのところ、PDOのようには見えません(もちろん、PhpStormの目では)。定義を表示します。また、PhpStormが考えていることを示してください - '$ this-> app-> db'に' db'をキャレットとして置き、Ctrl + Q(View | Quick Documentation)を呼び出し、そのスクリーンショットを表示してください。あなたの 'db'が適切に文書化されていれば、このエラーは表示されません(PHPDocを' $ stm'のようなインライン変数に使う必要はありません)。 – LazyOne
$ this-> app-> dbがどのように定義されているか、$ this-> appがどのようにクラスに渡されているかを示すOPを編集しました。 – kjdion84
これはすばらしいことですが、 "View | Quick Documentation"に表示される内容が表示されます(あなたの 'output_Home'クラスの中にあるとき、上記の私のコメントと同じように)。 – LazyOne