PHP 101: Классы и объекты. Часть 6 из серии статей о PHP… | Стефани Де Смедт
PHP 101: классы и объекты. Часть 6 из серии статей о PHP… | Стефани Де Смедт | MediumStephanie 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 подсказок ChatGPT17 историй· 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, функции, обрабатывающие операции с ресурсами, могут быть включены в методы класса (например,
- 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. |