ホームページ > バックエンド開発 > PHPの問題 > PHP ではクラスやメソッドを外部から静的に呼び出すことができないのはなぜですか?

PHP ではクラスやメソッドを外部から静的に呼び出すことができないのはなぜですか?

PHPz
リリース: 2023-03-24 17:52:01
オリジナル
1288 人が閲覧しました

PHP は広く使用されているプログラミング言語であり、簡潔で使いやすい構文、迅速な開発速度、および複数のデータベースのサポートが特徴です。ただし、一部の PHP 開発者は、クラスとメソッドを外部から静的に呼び出すことができないという問題に遭遇する可能性があります。この記事では、この問題を調査し、解決策を提供します。

静的呼び出しとは何ですか?

PHP 開発では、静的呼び出しは、オブジェクトをインスタンス化せずにクラスまたはメソッドを直接呼び出す方法です。サンプル コードは次のとおりです。

class Car{
   public static function run(){
      echo "the car is running";
   }
}

// 静态调用
Car::run();
ログイン後にコピー

上で説明したように、静的呼び出しは、クラス名と二重コロン演算子を使用してクラス メンバー (メソッドまたはプロパティ) にアクセスする方法です。

なぜ外部から静的に呼び出すことができないのでしょうか?

PHP では、外部から静的に呼び出すことができない主な理由は、アクセス修飾子の制限です。クラスまたはメソッドが private または protected 修飾子を使用して定義されている場合、そのメンバーにはクラス内でのみアクセスできます。したがって、外部から呼び出された場合、PHP インタープリターは対応するアクセス要求を拒否します。

解決策:

クラスまたはメソッドを外部で静的に呼び出したい場合は、(public 修飾子を使用して) それらをパブリックとして定義する必要があります。たとえば、パブリック静的メソッド myMethod を持つ MyClass というクラスがあるとします。これは次のように定義できます。

class MyClass{
   public static function myMethod(){
      echo "Hello World!";
   }
}
ログイン後にコピー

クラス内でメソッドを定義した後は、クラス名 Call によってどこからでも直接アクセスできます。クラスをインスタンス化せずにそれを実行します。たとえば、このメソッドは他の PHP ファイルで次のように呼び出すことができます。

MyClass::myMethod();
ログイン後にコピー

あるいは、静的アクセスにリフレクション API を使用することもできます。 Reflection API は、PHP の実行中にクラスとオブジェクトに関する情報を取得するために使用できる強力なツールです。次のコードは、リフレクション API を使用してクラスを静的にインスタンス化し、そのメソッドを呼び出す方法を示しています。

class Example{
   public function run(){
       echo "example code";
   }
}

// 使用反射API静态地调用run()函数
$class = new ReflectionClass('Example');
$method = $class->getMethod('run');
$method->invoke(null);
ログイン後にコピー

上記のコード例では、run() メソッドへの参照は、ReflectionClass クラスと getMethod() メソッドを使用して取得されます。次に、invoke() メソッドを使用してメソッドを呼び出します。ここでは Example クラスをインスタンス化する必要がないため、invoke() には null 値が渡されることに注意してください。

結論

PHP 開発では、クラスまたはメソッドへの外部静的呼び出しがアクセス修飾子によって制限される場合があります。この問題を解決するには、クラスまたはメソッドをパブリックとして定義し、クラス名と二重コロン演算子を使用してクラス メンバーにアクセスする必要があります。さらに、リフレクション API は静的アクセスにも使用できます。この情報を知ることは、開発者が PHP の力をより効果的に活用するのに役立ちます。

以上がPHP ではクラスやメソッドを外部から静的に呼び出すことができないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
php
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート