Содержание

PHP 101: Классы и объекты. Часть 6 из серии статей о PHP… | Стефани Де Смедт

PHP 101: классы и объекты. Часть 6 из серии статей о PHP… | Стефани Де Смедт | Medium

Stephanie De Smedt

·

Follow

5 мин чтения

·

26 апреля 2022 г.

Фото Эндрю Мока на Unsplash

Хотя все языки программирования встроены типы переменных (строка, логическое значение, целое число и т. д.) который может хранить данные, было бы невозможно иметь правильный тип данных для каждого элемента данных, который мы хотим сохранить.

Например, у нас есть ресторан и мы хотим хранить информацию о каждом блюде в меню. Мы хотели бы сохранить название блюда, цену и ингредиенты, а затем вычислить из ингредиентов…

Автор: Stephanie De Smedt

417 Подписчики

Менеджер проекта, изучающий веб- и мобильную разработку. Ученик на протяжении всей жизни, у которого проблемы с путешествиями и кофе.

Другие работы Стефани Де Смедт

Стефани Де Смедт

Swiftui: Работа с таймерами

Мощность таймеров: Узнайте, как отложить функцию, добавить часы обратного отсчета или сделать секундомер в вашем приложении для iOS

· 5 минут. Stephanie De Smedt

Создание списка с возможностью поиска с помощью SwiftUI

Создание списка с возможностью поиска с функцией автозаполнения для вашего приложения iOS

·4 мин чтения·23 ноября 2022 г.

Stephanie Де Смедт

в

SwiftUI: Использование Picker и PickerStyles

Узнайте, как создавать меню с несколькими вариантами выбора и собирать данные, вводимые пользователем 02 Стефани Де Смедт

PHP 101 : Fundamentals

Часть 1 из серии статей, объясняющих PHP — в ней рассматриваются основы языка, строки, переменные и арифметические операторы.

·чтение через 5 мин·19 апреля 2022 г.

Просмотреть все от Stephanie De Smedt

Рекомендовано на Medium

Tomasz Dobrowolski

in

7 концепций, которые должен понять каждый PHP-разработчик, чтобы добиться успеха

Янник Шено

в

Обновите свой проект до PHP 8.

2 с помощью Rector

Бесплатный инструмент с открытым исходным кодом для автоматизации задач рефакторинга

·Чтение через 2 минуты·20 марта

Списки

Общие знания в области кодирования

20 историй·43 сохранения

Никогда не поздно и не рано начать что-то

10 историй·17 сохранений

Кодирование и разработка

11 историй·28 сохранений

9001 9 подсказок ChatGPT

17 историй· 52 сохранения

Исмат Бабирли

Скрытые функции Laravel, которые вам нужно знать в 2023 году

Laravel — это мощный PHP-фреймворк, который существует уже более десяти лет. Благодаря своему элегантному синтаксису он приобрел огромное количество поклонников…

·Чтение через 4 мин·3 февраля

Джейкоб Беннетт

в

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

·4 минуты чтения·9 января

Иван Стоев

в

Стоит ли использовать PHP (Laravel) в 2023 году

Плюсы и минусы 9003 8

·4 минуты чтения·14 ноября 2022 г.

См. дополнительные рекомендации

Статус

Карьера

Преобразование текста в речь

Преобразование ресурсов PHP в объекты • PHP.Watch

Ресурс — это специальный тип в PHP, который содержит ссылка на внешний ресурс , отсюда и его название. Одной из долгосрочных целей разработки PHP является поэтапный отказ от использования ресурса в пользу стандартных объектов класса, которые более знакомы пользователям PHP, поддерживают ввод параметров, возвращаемых типов и свойств и имеют унифицированный интерфейс. подход к обработке внутренних компонентов PHP.

Проблемы с ресурсами

Ресурсы уводят несколько назад в историю, в эпоху PHP 4, где классы не очень часто использовались, и исключения также не часто использовались.

Тип ресурса не является типом, к которому вы можете приводить/преобразовывать, или даже типом, к которому можно применить стандартные типы параметров/возврата/свойства PHP. Это относится ко всем версиям PHP, включая PHP 8. Поскольку PHP 8 поддерживает скалярные типы и внутренние функции с поддержкой ошибок типов, отсутствие типа ресурса сдерживает некоторые функции, связанные с ресурсом , для эффективного добавления более строгих типов. .

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


Миграция ресурсов в объекты

Одним из долгосрочных усилий проекта PHP является миграция всех объектов ресурсов в объекты стандартного класса.

Учитывая долгую историю объектов ресурсов PHP , они часто широко используются в приложениях PHP. Переход к объектам класса должен быть как можно менее разрушительным.

Поддерживать согласованность параметров и возвращаемых типов

PHP ресурсы Объекты не предоставляют объектно-ориентированный интерфейс, который содержит методы для вызова. Все операции выполняются с помощью функций.

Функция, которая открывает ресурс (например, curl_init ), будет продолжать возвращать значение, но после миграции вместо этого будет возвращаться ресурс класс объект .

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

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

Ограничить объекты класса ресурсов

Новые объекты класса ресурсов, перенесенные в новую среду, могут быть созданы с помощью тех же функций, которые ранее создавали объекты ресурсов .

В плане миграции ресурсов PHP на объекты классы на этом этапе сильно ограничены.

  • Классы объявлены final , что предотвращает их расширение.
  • Классы не могут быть созданы с новым шаблоном CurlHandle . Пользователи должны использовать одни и те же функции для их создания.

Закрытие ресурса

Традиционные объекты ресурса требовали специфичной для ресурса функции для закрытия ресурса.

Например, ресурс curl , открытый функцией curl_init , закрывается функцией curl_close . PHP пытается автоматически закрыть ресурс, когда нет ссылок на объект, но рекомендуется явно закрывать ресурсы, чтобы избежать потенциальных утечек памяти.

При переносе ресурсов на объекты функции закрытия ресурсов не удаляются, так как это может привести к нарушению обратной совместимости. Они либо устарели, либо превратились в недействующие функции, которые не вносят никаких изменений в объект.

Предупреждения при миграции

Функция is_resource() возвращает false для закрытых ресурсов, и использование is_resource для проверки ресурса, когда он принимается в качестве параметра или сразу после создания ресурса, вполне оправдано. распространен во многих PHP-приложениях.

После миграции вызовы is_resource

вернут false и могут вызвать проблемы.

Для совместимости со всеми версиями PHP может потребоваться также проверка объектов нового класса:

 - is_resource($curl_handle)
+ is_resource($curl_handle) || $curl_handle instanceof \CurlHandle 

Это по-прежнему антишаблон, потому что сбойная функция создания ресурса возвращает false вместо ресурса (до миграции) или объекта класса (после миграции). Проверка против , а не false еще более удобочитаема, точна и совместима со всеми версиями PHP.

 - is_resource($curl_handle)
+ $curl_handle !== ложь 

Область применения в будущем

Когда традиционный тип ресурсов переносится в стандартные классы PHP, функции, обрабатывающие операции с ресурсами, могут быть включены в методы класса (например,

curl_setopt - CurlHandle::setOpt ).

Это может упростить код и улучшить взаимодействие с разработчиком, удалив при этом несколько функций, которые когда-то были разбросаны.

На данный момент новые объекты класса ресурсов не могут быть расширены или, тем более, созданы с помощью новая конструкция Foo() . Это гарантирует, что как только PHP улучшит объекты класса, больше не будет проблем с обратной совместимостью.


В PHP 8.0 некоторые из наиболее часто используемых расширений переходят от традиционных ресурсов объектов к стандартным классам PHP.

В PHP 8.0 они работают как объекты-значения, в отличие от полнофункциональных классов с методами внутри них. Большинство этих классов не позволяют создавать экземпляры с помощью new Foo() , и он должен быть создан с помощью существующих функций, которые возвращали объекта ресурса в предыдущих версиях.

В PHP 8.0 ресурс переносится на объекты довольно плавно, так как все функции возвращают и принимают новые объекты и ведут себя по той же семантике, что и предыдущие ресурса

объектов.


объект
Расширение ресурс (PHP < 8.0) (PHP >= 8.0)
Завиток Завиток CurlHandle
Завиток curl_multi CurlMultiHandle
Завиток curl_share Курлшарехандле
ГД гд GdImage
Розетки Розетка Розетка
Розетки Информация об адресе Информация об адресе
OpenSSL Ключ OpenSSL ОпенССЛАсимметричный ключ
OpenSSL OpenSSL X.509 OpenSSLCertificate
OpenSSL OpenSSL X.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *