さて、これはしばらくの間私の麺を焼いています。グローバルにアクセス可能な関数を定義するメソッドを持つクラスがあります。私の質問は、内部クラスメソッドがグローバルスコープでアクセス可能な関数をどのように定義できるかということです。
サンプルは次のとおりです。
class MyClass
{
// ... accessors, constuctors other methods, et al...
// The method in question:
private function myPrivateMethod()
{
if( !function_exists( 'someArbitraryFunction' ) )
{
function someArbitraryFunction( $args )
{
return "Hello, {$args} world!";
}
}
}
}
クラスは通常どおり、アプリケーションの非常に早い段階でインスタンス化されますが、別のクラスのメソッド内でインスタンス化されます。これは浅いスコープチェーンですが、アプリケーションの外部からアクセスできる理由が(私には)意味をなさないほどネストされています。これは、カプセル化についての私の理解に反します。いくつかの洞察をいただければ幸いです。