web-dev-qa-db-ja.com

PHPでグローバル関数を定義する方法

どのページからでもアクセスできるグローバル関数を定義する方法は?

37

Include.phpで:

function myGlobalFunction() {
    // do someting
}

次に、使用したいすべてのページで:

include 'include.php';
myGlobalFunction();
37
Jordi

関数内で関数を宣言することも、外部関数を1回だけ呼び出すように注意することもできます。そうしないと、エラーが発生します。

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
36
luarwo

関数を含めることなく常に使用可能にする場合は、次の操作を行います。

  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を見て、ファイルを見つけます。

34
user2656037

次に、使用するすべてのページで:

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

もちろん、「ページ」と言うときは、文字通り直接アクセスされたスタンドアロンの「ページファイル」を意味する場合があります。ユーザーで十分です。ただし、プログラム全体の異なる場所から同じ関数を使用する場合は、使用する前に定義するだけで、スコープに関係なくどこからでもアクセスできます。

編集:

ただし、プログラム全体の異なる場所から同じ関数を使用する場合は、使用する前に定義するだけで、スコープに関係なくどこからでもアクセスできます。

自分自身を修正するために、これはもちろんクラス関数のようなものには当てはまりませんが、通常の関数ではこれは当てはまります。

2
Super Cat

インクルードに入れてから、インクルードします。

2
Robert

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

ゲームテンペストは素晴らしい

0
jimconte