У меня есть несколько функций, которые я написал и регулярно использую на своих серверах, есть ли способ добавить их в ядро, чтобы мне не приходилось включать их из внешних файлов?
Я использую PHP5
Вы имеете в виду PHP 5.2.x или PHP 5.3?
Ну, это по-разному, но безразлично, это не 4 и не dev6






Вы можете добавить свои библиотеки как расширение ГРУША. Затем вы можете добавить его в свой локальный репозиторий PEAR. Груша добавляется к пути включения по умолчанию в php.ini. Затем вы можете просто использовать на своих машинах команду "pear install myextension".
Если это функции C, с которыми вы взаимодействуете в php (расширения php), вы можете сделать что-то подобное с PECL.
Просто чтобы уточнить PEAR - вам не нужно отправлять свой код в PEAR, но вы все равно можете создавать свои собственные пакеты в стиле PEAR. Вы даже можете настроить частный канал для распространения.
Да, это то, что я имею в виду под локальным репозиторием PEAR, и дал ссылку, объясняющую, как именно это сделать.
Я делал это раньше ... это довольно сложный процесс, но не так уж и плохо. Эта статья на zend.com расскажет вам все, что вам нужно знать:
http://devzone.zend.com/303/extension-writing-part-i-introduction-to-php-and-zend/
edit: Я должен добавить, что есть лучшие способы достичь сути того, что вы пытаетесь сделать. Помните, что это еще больше загромождает пространство имен PHP (уже очень загроможденное). Вероятно, вам лучше просто создать глобальный включаемый файл, в котором есть все ваши наиболее часто используемые функции, которые вы включаете везде, где вам это нужно.
edit2: Перечитав свой исходный вопрос, вы сказали, что не хотите этого делать, но я все же думаю, что это, вероятно, лучший способ. Но удачи вам с продлением маршрута.
Я собираюсь попробовать ... если получится, и ничего лучше не получится, я приму это.
Почему именно так сложно включить файлы туда, где они нужны?
Я полагаю, что директива auto_prepend_file PHP.ini может сработать. Но это не совсем рекомендуется.
Что ж, честно говоря, становится утомительно поддерживать прямо сейчас, есть файл в классе включения по умолчанию, который содержит 40+ включений, чтобы получить все функции, и он немного устарел, если бы они были в ядре, мне также не пришлось бы помнить о включении включить файл.
Тем не менее, если у вас есть один файл, который загружает их все, насколько сложно не забыть вызвать require_once «thefile.php»; в вашем сценарии? Включения - это просто образ жизни с PHP.
Если у вас есть автозагрузка, вы можете перемещать функции как статические методы класса, такого как My_Functions.
Или для разделения его на несколько файлов вы можете использовать My_Functions_Math. Тогда вам нужно будет загрузить только те функции, которые вам нужны. А с автозагрузкой вам не нужно беспокоиться о включении файлов.
Вы не можете автоматически загружать функции пространства имен, поэтому, если вы хотите использовать автозагрузку, функции должны быть статическими методами в классе. Но вы можете использовать пространство имен, чтобы упростить замену класса в будущем и / или сократить длинное имя класса. Пример:
use My\Functions\Math as Math;
Math::calcThis($i);
Пространства имен предназначены для php 5.3, который является превью php 6. Я думаю, что автор вопроса имел в виду php 5.2.
Да. Мой ответ в основном о 5.2, но с комментариями о пространствах имен в 5.3. По сути говоря, если он хочет использовать пространства имен, ему все равно придется поместить его в класс, если он все равно хочет использовать автозагрузку.
Если вы хотите, чтобы ваша функция всегда была доступна, без ее включения, сделайте следующее:
Создайте свою функцию в файле php.
В вашем php.ini найдите параметр «auto_prepend_file» и добавьте свой php-файл в эту строку, например: auto_prepend_file = "/path/to/my_superglobal_function.php"
Или, если вы напишете без пути, например: auto_prepend_file = "my_superglobal_function.php" Он будет искать файл в вашем include_path в php.ini.
Можете быть более конкретными. Вы имеете в виду функции, написанные на PHP, или функции, написанные на C, которые вы используете из PHP (расширения php)?