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

或者您可以创建另一个具有您想要的功能的对象并将其存储在测试中。

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

我看不出通过在另一个函数中编写一个函数会完成什么。你不妨写两个函数。

于 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 回答