PhpStorm не распознает методы PDO из класса
Не уверен, как именно задать этот вопрос. Но я использую PhpStorm в качестве моей IDE.
Я создал класс, который будет обрабатывать мою базу данных поиска и манипулирования. В нем у меня есть этот метод подключения:
private function connect() {
$dsn = 'mysql:host=' . $this->host . ';dbname=' . $this->db;
$options = [
PDO::ATTR_PERSISTENT => true,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
];
try {
$this->conn = new PDO($dsn, $this->user, $this->pass, $options);
} catch(PDOException $e) {
$this->error = $e->getMessage();
}
}
Метод работает нормально, но когда я иду использовать $this->conn
в других методах PhpStorm не распознает $this->conn
как PDO
объект.
Используя этот метод:
private function insert() {
$insert = $this->conn->prepare($sql);
$insert->execute();
}
PhpStorm говорит, что не может найти метод prepare
или же execute
,
Если я пройду $this->conn
в метод и использовать блок PHPDoc для параметра, он работает нормально:
/**
* @param $conn pdo
*/
private function insert($conn) {
$insert = $conn->prepare($sql);
$insert->execute();
}
Мне любопытно, почему это не позволяет мне использовать $this->conn
? Хотя это не так много кода для передачи $this->conn
к методу, просто кажется немного излишним.
Любые идеи о том, что мне нужно сделать по-другому?
3 ответа
Использование @var
перед определением свойства:
/**
* @var PDO
*/
private $conn;
Таким образом, вы говорите PhpStorm, что следующая переменная (свойство) имеет тип PDO
, Обратите внимание, что private
здесь зависит от вашего кода, это здесь только пример. Взгляните на это, чтобы узнать больше о комментариях к документации PHP в PhpStorm.
Правильнее всего здесь объявить свойство класса $conn и поместить туда свою аннотацию
например
myClass {
/**
* @var PDO
*/
private $conn;
Есть та же проблема в моем коде.
Кажется, это не единственное, что вы должны добавить в свой источник:
<?php
/**
* Created by PhpStorm.
* User: zac
* Date: 26/09/2017
* Time: 12:52
*/
namespace POO;
use \PDO; // <--- need by PhpStorm to find Methods of PDO
class PersonnagesManager
{
/**
* @var PDO <--- need by PhpStorm to find Methods of PDO
*/
private $_db;
public function __construct($db) {
$this->setDb($db);
}
public function add(Personnage $perso) {
$q = $this->_db->prepare('INSERT INTO personnages(nom) VALUES(:nom)');
$q->bindValue(':nom', $perso->nom());
$q->execute();
....
Так:
use \PDO;
а также
/**
* @var PDO
*/
оба необходимы!
У меня нормально работает на версии 2017.2.4