Как наследовать свойство 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);
    }
}
  • Вопрос задан
  • 2605 просмотров
Решения вопроса 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

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

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

Похожие вопросы