2010-12-16 3 views

ответ

35

В include.php:

function myGlobalFunction() { 
    // do someting 
} 

Тогда на каждой странице вы хотите использовать:

include 'include.php'; 
myGlobalFunction(); 
2

Вставьте его в комплект, затем включите его.

+0

Что бы быть иначе? – Sussagittikasusa

+1

@suss - не знаю, с моей головы, зачем вам это нужно? – Robert

+0

Все в порядке, его дополнительная строка, но она отлично работает:]. – Sussagittikasusa

27

Вы можете объявить функцию внутри функции, быть осторожным, чтобы вызвать только внешнюю функцию один раз или вы получите сообщение об ошибке.

class MyClass { 

    function declareGlobalsFn() { 
    // functions declared inside a function have global scope 

    function globalfn1() {echo "fn1";} 

    function globalfn2() {echo "fn2";} 
    } 
} 

$ob = new MyClass(); 
$ob->declareGlobalsFn(); 

globalfn1(); // fn1 
globalfn2(); // fn2 
+2

Вау, это для меня новый способ создания функций. Это хороший вопрос для экзамена PHP. Выполняется ли этот код или нет? Это закрытие или нет? :-) Можете ли вы сказать мне, когда это лучшая практика? Насколько я могу видеть, выполнение включает или требует ту же функцию, но последние два лучше подходят для обслуживания. Во всяком случае, к лучшему или к худшему вы узнали меня. Вот почему я поддержал ваш ответ. Хотя никто из вас не ответил на этот вопрос. Этот ответ просто: все функции, которые не являются членами класса, имеют глобальную область видимости. –

+0

Я не вижу веских оснований для определения функций таким образом. Среди прочего, 'declareGlobalsFn()' нельзя вызывать дважды, или вы получаете: 'PHP Неустранимая ошибка: не удается переопределить globalfn1()' –

+1

Это тоже ново для меня. Существует одна очень веская причина: вы можете комбинировать декларацию с наследованием посредством 'call parent :: declareGlobalsFn()' и избегать ошибки [проверки наличия] (http://php.net/manual/de/function.function- есть.php) сначала. – Robert

30

Если вы хотите, чтобы ваша функция всегда доступна, не включая его, сделайте следующее:

  1. Создайте свою функцию в файле PHP.

  2. В этой категории 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, чтобы найти файл.

+1

Полезно знать!Это может быть очень удобно в некоторых ситуациях! – BrainStone

+1

Это должен быть принятый ответ, потому что он решает проблему для ** любой страницы **. –

+3

Это не лучшее решение, потому что вы (или другие люди, которые даже не знают об этом) должны изменить каждую среду, в которой используется ваша заявка. – Lambrusco

1

Then in every page you want to use it:

include 'include.php'; myGlobalFunction();

-

Put it in an include, then include it.

Это технически не может быть правильным, в зависимости от контекста.

«Страница» может восприниматься как «файл», например «Вы должны включить файл функции в каждый файл, который хотите использовать функцию».

Как только функция определена в вашей программе, к ней можно получить доступ из любого места, перемещаясь вперед, пока программа не завершит выполнение.

Скажем у вас есть это:

index.php:

<?php 

function echo_1() { 
    echo 1; 
} 

echo_1(); 

require 'boot.php'; 

boot.php

<?php 

include_once 'page.php'; 

echo_1(); 
echo_9342949(); 

страница.PHP

<?php 

function echo_9342949() { 
    echo 9342949; 
} 

echo_1(); 

При том, что ваш выход будет 1119342949.

Конечно, когда вы говорите «страница», вы можете буквально означать прямой доступ к автономному «страницам», и в этом случае ответов от других пользователей будет достаточно. Однако, если вы хотите использовать одну и ту же функцию из разных мест в своей программе, просто определите ее, прежде чем намереваться использовать ее, и вы можете получить к ней доступ в любом месте, перемещаясь вперед независимо от области видимости.

Edit:

However, if you're looking to use the same function from different locations throughout your program, simply define it before you intend to use it and you can access it anywhere moving forward regardless of scope.

Чтобы исправить себя, это, конечно, не относится к вещам, как функций класса, но и для обычных функций это остается верным.

1

Чтобы развернуть на luarwo's answer, вы можете объявить функцию в своем конструкторе класса. Это может сделать ваш класс своего рода библиотекой функций, где функции доступны с любой страницы, где вы создаете экземпляр класса.

Sandbox \ MyGameLib

<?php 
namespace Sandbox; 
class MyGameLib { 
    public function __construct() { 
     if (!function_exists('loveGame')) { 
      function loveGame($game) { 
       print "The game $game is awesome"; 
      } 
     } 
    } 
} 

Качели

<?php 
namespace Seesaw; 
use Sandbox\MyGameLib; 

$m = new MyGameLib(); 
loveGame('Tempest'); 

The game Tempest is awesome

+0

Это фактически неверно, поскольку функция не будет глобальной, а частью пространства имен «Песочница». – andig

Смежные вопросы