2

PHPのOOPについて何か知る必要があります。
関数をクラスメソッドに入れることはできますか?このような:

<?php
class test {
   function test1() {

      // do something

      function test1_1() {
         // something else
      }

   }
}
?>

そして、次のように使用します。 $test->test1->test1_1();

4

4 に答える 4

3

いいえ、あなたがすることはできません。これにより、グローバル名前空間に新しい関数が作成され、複数回呼び出されたときに関数を再宣言しようとするとエラーが発生します。

于 2013-02-20T20:33:03.053 に答える
2

メソッド内に関数を配置できます(クロージャを検索します)。ただし、このように呼び出すことはできません。

閉鎖の例は次のようになります

class MyClass {
    public function myFunction() {
        $closure = function($name) {
            print "Hello, " . $name . "!";
        };

        $closure("World");
    }
}
于 2013-02-20T20:33:01.633 に答える
1

クロージャ(> = 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つの関数を作成した方がよいでしょう。

于 2013-02-20T20:40:39.327 に答える
0

いいえ、そのように呼び出すことはできません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);
于 2013-02-20T20:38:00.603 に答える