Nano Hash - криптовалюты, майнинг, программирование

Неопределенная переменная в производном классе с частной переменной в PHP?

Я пытаюсь создать запрос mysql, используя ООП в PHP. В приведенном ниже коде класс «database_disconnection» не выдает никаких ошибок или уведомлений, однако последний класс «database_query» дает мне уведомление о том, что $database_handle не определен. Я понятия не имею, что вызывает это, поскольку я создал класс database_query как производный класс от database_connection, который включает переменную $database_handle как частную. Любая помощь будет принята с благодарностью!

Создание объектов:

 include("includes/database_classes.php");

 new database_connection;
 new database_query('SELECT * FROM users');

и классы:

<?php
/*----------------------------------------------------------------------------------------------------*/
class database_connection
{

    private $username = 'root';
    private $password = '';
    private $hostname = 'localhost';
    private $database = 'assistant';    
    private $database_handle;

    function connect()
    {
        try
        {
            $database_handle = new PDO("mysql:host=$hostname;dbname=$database", $username, $password);
        }

        catch (PDOException $e) 
        {
            print "Error!: " . $e ->getMessage() . "<br/>";
            die();
        }
    }
}

/*----------------------------------------------------------------------------------------------------*/
class database_disconnection extends database_connection
{
    function disconnect()
    {
        $database_handle = null;
    }
}

/*----------------------------------------------------------------------------------------------------*/
class database_query extends database_connection
{
    private $mysql_statement;

    function __construct( $mysql_statement )
    {
        $this->mysql_statement = $mysql_statement;

        foreach($database_handle->query("$mysql_statement") as $row) {
            print_r($row);
        }
    }

}

/*----------------------------------------------------------------------------------------------------*/
?>
15.05.2017

  • $database_handle — это локальная переменная; $this->database_handle будет ссылаться на свойство класса 16.05.2017
  • Кроме того, частные атрибуты недоступны для дочерних классов. 16.05.2017
  • Dan08 - спасибо, я перепутал частное и защищенное! Спасибо за замечание. Однако использование защищенного ограничения доступа, которое разрешает производные, по-прежнему не работает. Ваш комментарий в сочетании с комментарием Марка Бейкера сработал, чтобы не замечать его. Спасибо! 16.05.2017

Ответы:


1

В вашем конструкторе database_query вы пытаетесь использовать $database_handle перед его инициализацией. Если вы заметили, вы инициализируетесь только в функции connect вашего родительского класса (database_connection).

Либо вызовите connect перед попыткой сослаться на него, либо инициализируйте его в родительском конструкторе и вызовите его (parent::__construct();).

15.05.2017
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..