Вопрос функции выхода php - PullRequest
0 голосов
/ 26 ноября 2009

Я заметил поведение в PHP, которое имеет смысл, но я не уверен, как обойти это.

У меня длинный скрипт, что-то вроде этого

<?php 
 if ( file_exists("custom_version_of_this_file.php") ) {
  require_once "custom_version_of_this_file.php";
  exit;
 }
 // a bunch of code etc
 function x () {
  // does something
 }
?>

Интересно, что функция x () будет зарегистрирована в скрипте ДО того, как будут вызваны require_once () и exit, и, следовательно, вызовут exit; Заявление не препятствует регистрации функций на странице. Поэтому, если у меня есть функция x () в файле require_once (), сценарий завершится сбоем.

Из-за сценария, который я пытаюсь (то есть использовать пользовательский файл, если он существует, а не исходный файл, который, вероятно, будет почти идентичен, но немного отличается), я хотел бы иметь функции в оригинале (вызов ) файл НЕ регистрируется, так что они могут существовать в пользовательском файле.

Кто-нибудь знает, как этого добиться?

Спасибо

Ответы [ 2 ]

2 голосов
/ 26 ноября 2009

Вы можете использовать функцию function_exists. http://us.php.net/manual/en/function.function-exists.php

if (!function_exists("x")) {
    function x()
    {
        //function contents
    }
}
0 голосов
/ 02 декабря 2010

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

this_file.php

class DefaultScripts {
    function x () {
        echo "base x";
    }

    function y() {
        echo "base y";
    }
}

if(file_exists('custom_version_of_this_file.php'))
    require_once('custom_version_of_this_file.php');
else
    $scripts = new DefaultScripts();

custom_version_of_this_file.php

class CustomScripts extends DefaultScripts {
    function x () {
        echo "custom x";
    }
}

$scripts = new CustomScripts();

Результаты, если файл существует

$scripts->x(); // 'custom x'
$scripts->y(); // 'base y'

, а если нет

$scripts->x(); // 'base x'
$scripts->y(); // 'base y'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...