Как определить глобальные функции в PHP - PullRequest
36 голосов
/ 16 декабря 2010

Как определить глобальную функцию, которая была бы доступна с любой страницы?

Ответы [ 6 ]

37 голосов
/ 16 декабря 2010

В include.php:

function myGlobalFunction() {
    // do someting
}

Затем на каждой странице, которую вы хотите использовать:

include 'include.php';
myGlobalFunction();
35 голосов
/ 07 февраля 2013

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

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
33 голосов
/ 06 августа 2013

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

  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, чтобы найти файл.

2 голосов
/ 16 декабря 2010

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

1 голос
/ 15 августа 2015

Затем на каждой странице, которую вы хотите использовать:

include 'include.php'; myGlobalFunction();

-

Поместите его во включенный файл,затем включите его.

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

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

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

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

index.php :

<?php

function echo_1() {
  echo 1;
}

echo_1();

require 'boot.php';

boot.php

<?php

include_once 'page.php';

echo_1();
echo_9342949();

page.php

<?php

function echo_9342949() {
  echo 9342949;
}

echo_1();

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

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

Редактировать:

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

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

0 голосов
/ 04 мая 2017

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

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');

Игра Буря потрясающая

...