Как наследовать свойство PHP?

Имеется класс подключение к базе в конструкторе.
class OCIConnect
{
  public $connect = null;
  public function __construct() {
        $this->connect = oci_connect($this->user, $this->pass, $this->dbHost);
        if (!$this->connect) {
            $m = oci_error();
            exit('Ошибка подключения ' . $m['message']);
        }
    }
}


Как воспользоваться в другом классе объектом connect?
class Agent extends OCIConnect
{
	function __construct()
	{
		parent::__construct();
	}
public static function getData($sql,$bind = null) {
        $query = oci_parse($this->connect, $sql);
    }
}
  • Вопрос задан
  • 2601 просмотр
Решения вопроса 1
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Почитайте о инкапсуляции. И совет - не делайте внутри классов exit или инициализацию подключения к базе. Ленивая инициализация намного удобнее.

class OCIConnect
{
  private $link = null;
  public function __construct($user, $pass, $host) {
        // fixme: это не стоит делать в конструкторе, лучше использовать ленивую инициализацию.
        $this->link = oci_connect($user, $pass, $dbHost);
        if (!$this->connect) {
            $m = oci_error();
            throw new Exception(sprintf('Connection error: %s', $m['message']));
        }
    }

    public function exec($sql) 
    {
         // exec sql
    }
}


class Agent
{
        /**
        * @var $connection
        **/
        private $connection;

	function __construct(OCIConnect $connection)
	{
               $this->connection = $connection;
	}
        public static function getData($sql,$bind = null) {
                // do something
               $this->connection->exec($sql);
        }
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
deadbyelpy
@deadbyelpy
веб-шмеб
Т.е. вы хотите сказать что
вот этот код не работает?

В наследуемом классе видны все свойства кроме private.
public static function getData($sql,$bind = null) {
        $query = oci_parse($this->connect, $sql);
    }
Ответ написан
Если вы хотите обратиться к свойству $connect родительского класса из дочернего, то также как вы сделали и с конструктором дочернего класса parent::$connect; И старайтесь отучить себя от обилия ненужных public свойств.
Ответ написан
Комментировать
@SashaSkot
Специалист широкого профиля
parent::connect

а вообще ООП в Пэхапэ сильно бьет по производительности. На сегодняшний день это утопия.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽