echo
иprint_r
иvar_dump
— обычными функциями
Двойные кавычки могут быть интерпретированы анализатором, одинарные — нет
isset: проверяет, установлено ли значение переменной и не равно ли оно NULL empty: проверяет, является ли переменная пустой, переменная равная 0 или false также считается пустой; отсутствие переменной не вызывает предупреждений
static: static может использоваться в статических или нестатических методах, может обращаться к статическим свойствам, методам, константам и нестатическим методам класса, но не может обращаться к нестатическим свойствам self: может использоваться для обращения к статическим свойствам, методам и константам класса, но self указывает на класс, в котором он определен, что является ограничением self $this: указывает на объект, который был вызван, то есть, в процессе выполнения, если объект вызывает свойства или методы класса, $this указывает на этот объект.Однако $this не может обращаться к статическим свойствам и константам, а также не может использоваться в статических методах.
require и include почти полностью идентичны, за исключением способа обработки ошибок. Require при ошибке генерирует ошибку уровня E_COMPILE_ERROR, что приводит к остановке выполнения скрипта, в то время как include генерирует предупреждение (E_WARNING), и скрипт продолжает выполнение. Include_once включает и выполняет указанный файл во время выполнения скрипта. Это поведение похоже на include, единственное отличие заключается в том, что если файл уже был включен, он не будет включен снова. Как и подразумевает его имя, он включает файл только один раз.
array_count_values — подсчитывает все значения в массиве.
array_flip — меняет местами ключи и значения в массиве.
array_merge — объединяет один или несколько массивов.
array_multisort — сортирует несколько массивов или многомерный массив.
array_pad — заполняет массив значением до указанной длины.
array_pop — извлекает последний элемент из массива (выталкивает элемент).
array_push — добавляет один или несколько элементов в конец массива (вталкивает элемент).
array_rand — случайным образом (псевдослучайным образом) выбирает один или несколько элементов из массива.
array_keys — возвращает ключи массива или части ключей.
array_values — возвращает значения массива.count — Подсчитывает количество элементов в массиве или количество свойств в объекте
sort — Сортирует массив
Куки: PHP поддерживает HTTP-куки. Куки — это механизм хранения данных на стороне клиента для отслеживания и идентификации пользователей.
Сессии: Механизм сессий в PHP используется для хранения данных, связанных с пользователем, при его непрерывном доступе к веб-приложению.
PHP предоставляет множество предопределенных переменных для всех скриптов.
Суперглобальные переменные — Суперглобальные переменные доступны во всех областях видимости.
$GLOBALS — Ссылка на все переменные, доступные в глобальной области видимости
$_SERVER — Информация о сервере и окружении
$_GET — Переменные HTTP GET
$_POST — Переменные HTTP POST
$_FILES — Переменные HTTP для загрузки файлов
$_REQUEST — Переменные HTTP Request
$_SESSION — Переменные сессии
$_ENV — Переменные окружения
$_COOKIE — HTTP Куки
$php_errormsg — Сообщение об ошибке
$HTTP_RAW_POST_DATA — Нераспаршенные данные POST
$http_response_header — HTTP Заголовки ответа
$argc — Количество переданных аргументов
$argv — Массив переданных аргументов
global $variable;
для доступа к ним.Суперглобальные переменные: $GLOBALS, $_SERVER, $_GET, $_POST, $_FILES, $_COOKIE, $_SESSION, $_REQUEST, $_ENVПередача по значению приводит к созданию копии объекта, в то время как передача по ссылке позволяет двум переменным указывать на один и тот же объект.
Конструктор: PHP 5 позволяет разработчикам определить метод как конструктор в классе. Классы с конструктором вызывают этот метод при каждом создании нового объекта, что делает его идеальным для выполнения инициализации перед использованием объекта. Деструктор: PHP 5 ввёл концепцию деструктора, аналогичную другим объектно-ориентированным языкам, таким как C++. Деструктор вызывается, когда все ссылки на объект удалены или когда объект явно уничтожен.
Методы __construct(), __destruct(), __call(), __callStatic(), __get(), __set(), __isset(), __unset(), __sleep(), __wakeup(), __toString(), __invoke() и другие в PHP называются "магическими методами" (magic methods).
Управление доступом к свойствам или методам осуществляется путем добавления ключевых слов public (общедоступный), protected (защищённый) или private (частный) перед ними. Элементы класса, объявленные как общедоступные, могут быть доступны из любого места.PHP 5 ввёл ключевое слово final
. Если метод в родительском классе объявлен как final
, то его нельзя переопределить в дочернем классе. Если класс объявлен как final
, то его нельзя наследовать.
$\_{SERVER}['REMOTE_ADDR']$
$\_{SERVER}['SERVER_ADDR']$
$\_{SERVER}['HTTP_X_FORWARDED_FOR']$
self
. В PHP метод, вызываемый через self::
, автоматически становится статическим.
Вызов статического метода класса не приводит к автоматическому вызову конструктора класса.Статический вызов, использование PHP-рефлексии.### Параметры конфигурации php.ini
<? ?>
) |
| precision | "14" | Количество знаков после запятой для чисел с плавающей запятой |
| disable_functions | "" | Запрет на использование определенных функций |
| disable_classes | "" | Запрет на использование определенных классов |
| expose_php | "" | Отображение информации о том, что PHP установлен на сервере |
| max_execution_time | 30 | Максимальное время выполнения скрипта |
| memory_limit | 128M | Максимальное количество памяти, доступное для каждого скрипта |
| error_reporting | NULL | Уровень отчета об ошибках E_ALL
& ~E_NOTICE
& ~E_STRICT
& ~E_DEPRECATED
|
| display_errors | "1" | Отображение ошибок |
| log_errors | "0" | Запись ошибок в файл error_log |
| error_log | NULL | Файл, в который будут записываться ошибки скрипта |
| upload_max_filesize | "2M" | Максимальный размер загружаемого файла |
| post_max_size | "8M" | Максимальный размер данных POST |```shell
php -ini | grep short_open_tag # просмотр параметров конфигурации php.ini
- Динамическое изменение параметров
```php
ini_set(string $varname, string $newvalue);
ini_set('date.timezone', 'Asia/Shanghai'); # установка часового пояса
ini_set('display_errors', '1'); # отображение ошибок
ini_set('memory_limit', '256M'); # установка максимального лимита памяти
```### Конфигурация php-fpm. conf
|Название|По умолчанию|Примечания|
|---|---|---|
|pid||Путь к файлу PID|
|error_log||Путь к файлу с ошибками|
|log_level|notice|Уровень логирования: alert - требует немедленного вмешательства, error - ошибка, warning - предупреждение, notice - важная информация, debug - отладочная информация|
|daemonize|yes|Установка FPM для работы в фоновом режиме|
|listen|ip:port, port, /path/to/unix/socket|Адрес, по которому FPM будет принимать запросы FastCGI|
|pm|static, ondemand, dynamic|Способ управления дочерними процессами процесс-менеджером|
|request_slowlog_timeout|'0'|Пороговое значение для записи медленных запросов в журнал|
|slowlog||Путь к журналу медленных запросов|
### Причины возникновения ошибок 502, 504 и способы их решения
#### Ошибка 502
Ошибка 502 означает ошибку шлюза. Когда PHP-CGI получает недействительный ответ, шлюз выводит эту ошибку.
- Значение параметра memory_limit в php. ini слишком маленькое
- Некорректные значения параметров max_children и max_requests в php-fpm. conf
- Некорректные значения параметров request_terminate_timeout и max_execution_time в php-fpm. conf
- Недостаточное количество процессов для обработки запросов, проблемы с производительностью скриптов
#### Ошибка 504
Ошибка 504 означает, что шлюз не получил ответ от PHP-CGI в течение заданного времени. Шлюз выводит эту ошибку.
- В стеке Nginx+PHP можно настроить время ожидания FastCGI: fastcgi_connect_timeout, fastcgi_send_timeout, fastcgi_read_timeout
#### Ошибка 500
Проблемы с PHP-кодом, проблемы с правами доступа к файлам, проблемы с ресурсами
#### Ошибка 503
Проблемы с доступом к серверу, недоступность сервера, проблемы с правами доступа к файламПерегрузка или техническое обслуживание
### Как вернуть 301-перенаправление
```php
header('HTTP/1.1 301 Moved Permanently');
header('Location: https://blog.maplemark.cn');
$conn = mysql_connect('127.0.0.1:3306', 'root', '123456');
if (!$conn) {
die(mysql_error() . "\n");
}
mysql_query("SET NAMES 'utf8'");
$select_db = mysql_select_db('app');
if (!$select_db) {
die(mysql_error() . "\n");
}
$sql = "SELECT * FROM `user` LIMIT 1";
$res = mysql_query($sql);
if (!$res) {
die(mysql_error() . "\n");
}
while ($row = mysql_fetch_assoc($res)) {
var_dump($row);
}
mysql_close($conn);
$conn = @new mysqli('127.0.0.1:3306', 'root', '123456');
if ($conn->connect_errno) {
die($conn->connect_error . "\n");
}
$conn->query("set names 'utf8';");
$select_db = $conn->select_db('user');
if (!$select_db) {
die($conn->error . "\n");
}
$sql = "SELECT * FROM `user` LIMIT 1";
$res = $conn->query($sql);
if (!$res) {
die($conn->error . "\n");
}
while ($row = $res->fetch_assoc()) {
var_dump($row);
}
$res->free();
$conn->close();
$pdo = new PDO('mysql:host=127.0.0.1:3306;dbname=user', 'root', '123456');
$pdo->exec("set names 'utf8'");
$sql = "SELECT * FROM `user` LIMIT 1";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(1, 1, PDO::PARAM_STR);
$rs = $stmt->execute();
if ($rs) {
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
var_dump($row);
}
}
$pdo = null;
Это метод использования PHP в качестве модуля для многопоточного веб-сервера, такого как Apache. Для многопоточного сервера характерно наличие родительского процесса и группы дочерних процессов, которые работают вместе. Дочерние процессы отвечают за создание веб-страниц. Когда клиент обращается к родительному процессу, запрос передается свободному дочернему процессу. Это означает, что при повторном обращении к серверу одним и тем же клиентом, запрос может быть обработан другим дочерним процессом. После установления постоянного соединения все последующие запросы к базе данных могут использовать уже установленное соединение.
PHP-код => Запуск PHP и Zend-движка, загрузка зарегистрированных расширений => Лексический/синтаксический анализ кода => Компиляция в opcode (opcache) => Выполнение opcode
В PHP7 добавлено абстрактное синтаксическое дерево (AST), которое генерируется на этапе синтаксического анализа, а затем используется для генерации массива opcode.
MVC включает три типа объектов.Модель (Model) представляет объекты приложения, представление (View) — их отображение на экране, а контроллер (Controller) — определяет, как пользовательский интерфейс реагирует на ввод пользователя. Без использования MVC, пользовательский интерфейс часто объединяет эти объекты, в то время как MVC разделяет их для повышения гибкости и повторного использования.
Простой в использовании, мощный и предоставляющий набор инструментов для создания крупных, мощных приложений
В классе определяется встроенный переменной, что позволяет другим методам класса обращаться к ней
set_exception_handler — Установка пользовательской функции обработки исключений Использование try / catch для перехвата исключений
$fp = fsockopen("blog.maplemark.cn", 80, $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br />\n";
} else {
$out = "GET /backend.php/ HTTP/1.1\r\n";
$out .= "Host: blog.maplemark.cn\r\n";
$out .= "Connection: Close\r\n\r\n";
fwrite($fp, $out);
```### Объектно-реляционное отображение/ORM
#### Преимущества
- Сокращение времени кодирования, уменьшение или исключение необходимости в кодировании моделей, снижение затрат на изучение баз данных
- Динамическое отображение таблиц, что позволяет уменьшить изменения кода при изменении структуры таблиц
- Легкое добавление дополнительных функций (слоя кэширования)
#### Недостатки
- Потребление производительности при отображении, использование памяти при работе с объектами ORM
- Низкая читаемость ORM-синтаксиса при сложных SQL-запросах (использование нативных SQL-запросов)
### Реализация цепного вызова
Класс определяет встроенный переменной, чтобы другие методы в классе могли к ней обращаться
### Обработка исключений
set_exception_handler — Установка пользовательской функции обработки исключений
Использование try / catch для перехвата исключений
### Как реализовать асинхронный вызов
```php
$fp = fsockopen("blog.maplemark.cn", OnClickListener 80, $errno, $errstr, 30);
if (! $fp) {
echo "$errstr ($errno)<br />\n";
} else {
$out = "GET /backend.php/ HTTP/1. 1\r\n";
$out .= "Host: blog.maplemark.cn\r\n";
$out .= "Connection: Close\r\n\r\n";
fwrite($fp, $out);
}
Закрытие, очередь
Очереди сообщений, сокеты, семафоры, общая память, сигналы, каналы
array_map, array_filter, array_walk, usort is_callable + обратные вызовы + анонимные функции
cURL, file_get_contents, fopen, fsockopen
Переменные, объявленные в PHP, хранятся в структурах zval в движке Zend, слаботипизированные переменные реализуются через объединения
$ php /php-src/ext/ext_skel.php --ext
```- Определение функций расширения
zend_module_entry определяет имя расширения, а PHP_FUNCTION определяет функции.
- Компиляция и установка
```shell
$ phpize $ . /configure $ make && make install
Счетчик ссылок
С версии PHP 5.4.0 в PHP реализован метод повторного использования кода, называемый trait.
Функция-генератор выглядит как обычная функция, но вместо возврата одного значения она может генерировать множество значений, которые ей требуются.
А вы знаете модель процессов Swoole?
Декларация скалярных типов, декларация типа возвращаемого значения, определение массива констант через define(), анонимные классы, одновременное импортирование классов из одного пространства имен.
Оптимизация структуры ZVAL, размер уменьшен с 24 до 16 байт.Внутренний тип zend_string использует char массив, а не char*.
Внутренняя реализация массива PHP изменена с hashtable на zend array.
Оптимизация механизма вызова функций, уменьшение количества инструкций за счет оптимизации передачи параметров.
### Принципы сравнения строк и чисел, обратите внимание на восьмеричные числа с нулем в начале, шестнадцатеричные числа с префиксом 0x
### Что такое BOM-заголовок и как его удалить
### Что такое движок шаблонов, для решения каких проблем он используется, принципы реализации (Smarty, Twig, Blade)
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )