PHP класс продлен в несколько раз - PullRequest
0 голосов
/ 31 октября 2011

Потратив полчаса на то, чтобы найти правильное и понятное название для этого вопроса, я наконец сдался. Извиняюсь за это, я не являюсь носителем английского языка.

В любом случае, речь идет об использовании определенного класса, который будет расширен несколько раз, а не множественного наследования. Итак, представьте себе два класса репозитория, вызываемых из одной и той же функции:

public function someFunction() 
{
   $qp = QuestionRepository();
   $cp = CommentRepository();
} 

, а хранилище вопросов выглядит так:

class QuestionRepository extends PDO 
{
    public function __construct()
    {
        parent::__construct();
    }
}

Репозиторий комментариев выглядит так:

class CommentRepository extends PDO 
{
    public function __construct()
    {
        parent::__construct();
    }
}

тогда как класс PDO такой:

class PDO 
{
    public function __construct() 
    {
        $pdo = new PDO(...);
    } 
}

Таким образом, класс PDO в основном расширяется дважды, поэтому инициируется два экземпляра PDO. Однако вопрос заключается в том, означает ли это 2 разных соединения с mysql - что приведет к снижению производительности, или pdo распознает наличие живого соединения, поэтому просто игнорирует второй экземпляр?

Ответы [ 2 ]

1 голос
/ 31 октября 2011

Вы можете объявить «статическое» поле в PDO для подключения mysql.Таким образом, одно и то же поле будет использоваться в каждом экземпляре, независимо от того, какой подкласс отвечает за создание экземпляра.

Также требуется статический доступ к полю;PDO::$mysql_link;

Если вы объявите поле без указания видимости, оно будет общедоступным, то есть вы сможете ссылаться на одно и то же поле из любого места, пока определено PDO.

0 голосов
/ 31 октября 2011

Я не уверен, есть ли чек от PDO.

Но у вас есть другой выбор.Создайте объект PDO Singelton и используйте этот Singleton в каждом из ваших классов или используйте внедрение зависимостей.То есть настроить один объект PDO и внедрить его в ваш класс в конструкторе (внедрение конструктора) или с помощью другой функции (внедрение сеттера)

Я бы запустил с внедрением зависимости, чтобы вы могли легко изменить свой «объект доступа к базе данных»

...