У меня есть вопрос о том, как функции объявлены в PHP.
Файл «functions.php» => functions toto(){ return "1"; }
Основной файл
включают в себя ( "functions.php") functions toto () {return "main"; } echo toto ();
Файл «functions.php» => functions toto(){ return "1"; }
Файл «functions2.php» => functions toto(){ return "2"; }
Основной файл
включают в себя ( "functions.php") включают в себя ( "functions2.php") echo toto ();
Первая тестовая работа и эхо «основного»
Второй тест не работает => фатальная ошибка «функция toto уже определена»
Я делаю дополнительные тесты:
Кто-то может объяснить мне, как именно эта работа?
Спасибо за прочтение
PHP заявления от include
Семейство не копировать-вставлять содержимое включенного файла в контексте включения. Включение происходит во время выполнения.
В вашем первом примере функция toto()
определенный в основном файле создается во время компиляции. Затем, на казни, functions.php
Файл прочитан и проанализирован. Он генерирует ошибку, потому что пытается определить функцию toto()
это уже определено.
То же самое происходит во втором примере во время включения functions.php
, Кроме того, вы получите ту же ошибку, если объявите функцию toto()
два раза в основной скрипт.
В любом случае функции и константы PHP не могут быть повторно объявлены.
Быстрая цитата из документация:
PHP не поддерживает перегрузку функций, а также невозможно отменить или переопределить ранее объявленные функции.
Вы можете проверить, была ли функция уже определена (чтобы избежать ее повторного определения), используя function_exists()
PHP функция:
function toto() { return 1; }
if (! function_exists('toto')) {
function toto() { return 2; }
}
Указывает на тему
toto()
иначе вы получите Fatal error: Cannot redeclare
Ты можешь использовать if(!function_exists('toto')){ /*declaration*/ }
чтобы предотвратить это.toto()
, но следующая строка объявляет также toto()
, Декларация в том числе бросить Fatal error
, if(1){ }
вокруг декларации, так что знайте Fatal Error
приходит не из включенного файла.Прецедент:
//file1.php
<?php
function toto(){ echo __FILE__; }
//file2.php
<?php
include 'file1.php';
function toto(){ echo __FILE__; }
toto();
Вызов:
php file2.php
Результат:
Неустранимая ошибка: невозможно повторно объявить toto () (ранее объявлено в file2.php)
//file1.php
<?php
function toto(){ echo __FILE__; }
//file2.php
<?php
include 'file1.php';
if(1){
function toto(){ echo __FILE__; }
}
toto();
Вызов:
php file2.php
Результат:
Неустранимая ошибка: невозможно повторно объявить toto () (ранее объявлено в file1.php)