2010-12-16 56 views

回答

35

在include.php:

function myGlobalFunction() { 
    // do someting 
} 

然後在每一個頁面,你想用它:

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

把它放在一個包含,然後包括它。

+0

是什麼法子? – Sussagittikasusa 2010-12-16 08:47:25

+1

@suss - 不知道我的頭頂,爲什麼你需要一個? – Robert 2010-12-16 08:48:46

+0

它的所有權利,它是一個額外的線,但它工作正常:]。 – Sussagittikasusa 2010-12-16 09:01:37

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考試來說,這看起來很不錯。此代碼是否執行?這是封閉還是不封閉? :-)你能告訴我什麼時候這是最佳做法嗎?據我可以看到執行包括或需要相同的功能,但後兩個是更好的維護。無論如何,無論好壞,你都學到了一些東西。這就是爲什麼我提高了你的答案。雖然你們中沒有人真正回答過這個問題。答案很簡單:不是類成員的所有函數都具有全局範圍。 – 2013-07-07 06:30:11

+0

我沒有看到用這種方法定義函數的好理由。其中,'declareGlobalsFn()'不能被調用兩次,否則:'PHP致命錯誤:無法重新聲明globalfn1()' – 2014-09-23 17:45:50

+1

這對我來說也是新的。有一個很好的理由:你可以通過調用parent :: declareGlobalsFn()來將聲明與繼承結合起來,並通過[檢查存在]來避免錯誤(http://php.net/manual/de/function.function-首先是exists.php)。 – Robert 2014-12-16 12:10:57

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_pathphp.ini找到該文件。

+1

很高興知道!在某些情況下,這可能非常方便! – BrainStone 2014-11-05 23:29:35

+1

這應該是被接受的答案,因爲它可以解決**任何頁面**的問題。 – 2016-01-06 10:02:02

+3

這不是最好的解決方案,因爲你(或者其他人甚至不知道這個問題)必須修改你的應用程序的每個環境 – Lambrusco 2016-09-23 08:33:17

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

當然,當您說'頁面'時,您可能字面意思是直接訪問的獨立'頁面文件',在這種情況下,來自其他用戶的答案就足夠了。但是,如果您希望在整個程序中使用來自不同位置的相同功能,只需在打算使用它之前對其進行定義,並且無論範圍如何,都可以隨時隨地訪問它。

編輯:

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,你可以在你的類構造函數中聲明這個函數。這可以使你的類成爲一種函數庫,其中可以從你創建類實例的任何頁面訪問這些函數。

沙盒\ 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

這實際上是錯誤的,因爲函數不會是全局的,而是「Sandbox」命名空間的一部分。 – andig 2017-10-26 08:02:48