Intereting Posts
Запрос Mysql с использованием значений в JSONArray Отражает ли идея идеи частных методов, потому что частные методы могут быть доступны за пределами класса? PHP-скрипт работает только на локальном хосте, а не на Amazon? Получение «косвенной модификации перегруженного имущества не имеет никакого эффекта» Как проще всего объявить двумерный массив в PHP? Любой способ получить доступ к администрации Gearman? Как POST ассоциативный массив в PHP mysql_fetch_array возвращает только одну строку Ошибка Bind_param без объекта с mysqli PHP / JS / JQUERY: интеллектуальный метод автоматической проверки / обновления состояния точек Загрузите несколько изображений с удаленного сервера с помощью PHP (много изображений) Как я могу получить сериализованный HTML-код элемента с DOMDocument PHP? Laravel 5.3 – Одиночное уведомление для пользовательской коллекции (последователи) Получить часть URL-адреса переписать URL-адрес при отправке формы

PHP, OOP, Создание объекта

Я изучаю PHP, OOP, и я многому научился, но есть мелочи, которые дразнят меня,

Для иллюстрации создания объекта есть изображение, которое я создал: Link

если кто-то может ответить на несколько вопросов, пожалуйста …

  • Я буду счастлив, если кто-то может исправить меня, если я сделал что-то неправильно с изображением.
  • Когда я пытаюсь выполнить эхо- объект, я получаю сообщение об ошибке, которое говорит о том, что объект (я понимаю, что объект является ссылкой на память) не может быть преобразован в строку, если это не строка имени ячейки памяти (пример: «F70») ) Могу ли я привести пример, как выглядит расположение памяти.
  • И о переменной, содержащей ссылку, я понимаю, что это регулярная переменная, помещенная со всеми остальными глобальными переменными, я имею в виду, что если я создаю новый объект и новую переменную, то первый объект (переменная) содержит ссылку, но это регулярная глобальная переменная, та же самая другая переменная:

Первый шаг: я определяю переменную объекта …

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

Третий шаг: новая глобальная переменная, созданная с нашей ссылкой.

Что означает, что когда я вызываю объект (переменную):

Первый шаг: мы перейдем в область памяти, где наша переменная создана …

Второй шаг: значение переменной (ссылка) ссылается на ячейку памяти, в которой находится объект …

Третий шаг: у нас есть доступ к методам и свойствам этого объекта.

Я буду рад, если кто-то может помочь мне понять это, спасибо всем и хорошо провести день.

  1. Чтобы иметь строковое представление объекта, вы должны реализовать функцию __toString()

  2. Что касается внутренних механизмов – это намного сложнее, чем вы думаете. Поскольку PHP является динамическим языком – он должен хранить много информации для каждого класса, для каждого объекта класса. Не просто память, необходимая для строковой переменной, но и отображение функций, структуры управления памятью, структуры типов, значения по умолчанию. Если вы хотите глубже, прочитайте это

PHP не возвращает ссылку на память, а экземпляр вашего класса. В общем, вам неизвестно, где в памяти создается и сохраняется объект. Если вам все еще нужно работать с ячейками памяти и ссылками в PHP, то на Stack Overflow уже есть отличный ответ: как проверить расположение памяти переменной в php? , Что касается использования ООП в PHP, вы должны проверить руководство по классам и объектам на php.net.

Что касается эхо-сигнала объекта: если вы хотите эхо-объект, вам нужно определить магический метод __toString() который указывает, как объект должен быть представлен как строка. В вашем случае это будет

 <?php class x { public function num() { return 5; } public function __toString() { return $this->num(); } } $ob = new x(); echo $ob; // outputs 5 

В PHP $ob не является ссылкой на ячейку памяти, а экземпляр класса. Таким образом, вы также можете вызвать echo $ob->num(); без определения метода __toString() .

Все переменные PHP хранятся как «zval».

Узнать больше о zval's: http://docstore.mik.ua/orelly/webprog/php/ch14_06.htm

Функция для сброса внутренней информации zval: http://php.net/manual/en/function.debug-zval-dump.php

Когда вы пытаетесь повторить свой объект, вы должны переопределить магическую функцию __toString () в своем классе. Я действительно советую вам прочитать эту статью http://net.tutsplus.com/tutorials/php/object-oriented-php-for-beginners/ . Это в значительной степени отвечает на ваши вопросы.

Я не программист на PHP, но, возможно, я могу помочь вам хотя бы немного, чтобы снизить ваше замешательство.

Опять же, я не уверен, как php (поскольку он интерпретируется языком) фактически обрабатывает создание объекта, но он должен быть очень близок к тому, как это делает C ++. В конце концов, в бегах на том же HW.

Итак, вы знаете, что ваш класс является «шаблоном» для компилятора (интерпретатора). Но вам нужно понять, что такое объект на самом деле. Объект фактически подобен таблице информации. Он содержит переменные вашего класса. Он не содержит методов.

Таким образом, при создании объекта с использованием new оператора эта «таблица» создается в памяти и заполняется значениями. Эта таблица имеет свой базовый адрес. Это назначается переменной объекта.

Здесь важно, что объект не содержит актуационных методов. Они создаются в другом месте в памяти. Когда вы вызываете некоторый метод объекта, вы фактически называете «регулярную» функцию, а компилятор передает адрес объекта (этой таблицы) в него как один из его параметров.

Это очень упрощено. Но я считаю, что это должно помочь вам создать изображение, что на самом деле делает компьютер в фоновом режиме.