PHPのOOPについて何か知る必要があります。
関数をクラスメソッドに入れることはできますか?このような:
<?php
class test {
function test1() {
// do something
function test1_1() {
// something else
}
}
}
?>
そして、次のように使用します。 $test->test1->test1_1();
いいえ、あなたがすることはできません。これにより、グローバル名前空間に新しい関数が作成され、複数回呼び出されたときに関数を再宣言しようとするとエラーが発生します。
メソッド内に関数を配置できます(クロージャを検索します)。ただし、このように呼び出すことはできません。
閉鎖の例は次のようになります
class MyClass {
public function myFunction() {
$closure = function($name) {
print "Hello, " . $name . "!";
};
$closure("World");
}
}
クロージャ(> = PHP5.3)を使用して、関数を変数に格納できます。
例えば:
class Test {
public $test1_1;
public function test1() {
$this->test1_1 = function() {
echo 'Hello World';
};
}
public function __call($method, $args) {
$closure = $this->$method;
call_user_func_array($closure, $args);
}
}
$test = new test();
$test->test1();
$test->test1_1();
または、必要な関数を使用して別のオブジェクトを作成し、それをTestに保存することもできます。
class Test {
public $test1;
public function __construct(Test1 $test1) {
$this->test1 = $test1;
}
}
class Test1 {
public function test1_1 {
echo 'Hello World';
}
}
$test1 = new Test1();
$test = new Test($test1);
$test->test1->test1_1();
別の関数内に関数を記述して何を達成できるかわかりません。2つの関数を作成した方がよいでしょう。
いいえ、そのように呼び出すことはできませんtest1_1
。関数で変数または関数を定義すると、で定義された場所に対してのみローカルになります。
したがって、これだけが機能します。
class test {
function test1($x) {
$test1_1 = function ($x) {
return $x*2;
};
echo $test1_1($x) ."\n";
}
}
// this will give 4
$test->test1(2);