如何定義可從任何頁面訪問的全局函數?如何在PHP中定義全局函數
回答
在include.php:
function myGlobalFunction() {
// do someting
}
然後在每一個頁面,你想用它:
include 'include.php';
myGlobalFunction();
把它放在一個包含,然後包括它。
你可以聲明函數內部功能,要小心只調用外部函數一次或者你會得到一個錯誤。
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
哇,這對我來說是一種創造功能的新方法。對於PHP考試來說,這看起來很不錯。此代碼是否執行?這是封閉還是不封閉? :-)你能告訴我什麼時候這是最佳做法嗎?據我可以看到執行包括或需要相同的功能,但後兩個是更好的維護。無論如何,無論好壞,你都學到了一些東西。這就是爲什麼我提高了你的答案。雖然你們中沒有人真正回答過這個問題。答案很簡單:不是類成員的所有函數都具有全局範圍。 – 2013-07-07 06:30:11
我沒有看到用這種方法定義函數的好理由。其中,'declareGlobalsFn()'不能被調用兩次,否則:'PHP致命錯誤:無法重新聲明globalfn1()' – 2014-09-23 17:45:50
這對我來說也是新的。有一個很好的理由:你可以通過調用parent :: declareGlobalsFn()來將聲明與繼承結合起來,並通過[檢查存在]來避免錯誤(http://php.net/manual/de/function.function-首先是exists.php)。 – Robert 2014-12-16 12:10:57
如果你希望你的功能始終可用,而不包括它,這樣做:
在PHP文件創建功能。
在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
找到該文件。
很高興知道!在某些情況下,這可能非常方便! – BrainStone 2014-11-05 23:29:35
這應該是被接受的答案,因爲它可以解決**任何頁面**的問題。 – 2016-01-06 10:02:02
這不是最好的解決方案,因爲你(或者其他人甚至不知道這個問題)必須修改你的應用程序的每個環境 – Lambrusco 2016-09-23 08:33:17
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.
要糾正自己,這當然是不喜歡的事情類功能真實的,但對於正常功能這仍然是正確的。
要擴展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
這實際上是錯誤的,因爲函數不會是全局的,而是「Sandbox」命名空間的一部分。 – andig 2017-10-26 08:02:48
- 1. PHP自定義超全局函數
- 2. 如何正確定義全局函數?
- 3. 在C#中全局定義函數
- 4. 在kohana中定義全局函數
- 5. 在jQuery中定義全局函數
- 6. 全局函數未定義
- 7. 如何在Makefile中定義全局shell函數?
- 8. 如何在函數中定義全局變量?
- 9. 如何在JavaScript中定義一個函數的全局變量?
- 10. 如何在定義函數中獲取全局作用域?
- 11. 如何在全局可用的jQuery.ready中定義一個函數?
- 12. 如何在javascript中定義新的全局函數
- 13. 如何在Swift中定義全局函數?
- 14. 如何在scala中定義全局函數?
- 15. noSuchMethod在全局定義的函數
- 16. 在匿名自執行函數中定義全局函數?
- 17. 在PHP中定義自定義超全局數組
- 18. Python函數定義的全局參數
- 19. 如何以編程方式在函數或方法中定義全局函數?
- 20. PHP如何在函數中定義局部變量?
- 21. 如何使用函數循環中定義的全局變量
- 22. 如何將document.ready()中定義的函數轉換爲全局
- 23. 如何在kotlin中全局定義arralist
- 24. 從函數內部定義全局
- 25. C#中如何存在全局函數?
- 26. 在函數內部定義全局函數
- 27. 如何定義全局自定義RoutedCommand?
- 28. 如何定義全局數組?
- 29. 全局PHP類的函數?
- 30. 全局設置php函數
是什麼法子? – Sussagittikasusa 2010-12-16 08:47:25
@suss - 不知道我的頭頂,爲什麼你需要一個? – Robert 2010-12-16 08:48:46
它的所有權利,它是一個額外的線,但它工作正常:]。 – Sussagittikasusa 2010-12-16 09:01:37