Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP中使用OOP时在方法中使用函数_Php_Class_Methods - Fatal编程技术网

在PHP中使用OOP时在方法中使用函数

在PHP中使用OOP时在方法中使用函数,php,class,methods,Php,Class,Methods,我需要了解PHP中的OOP。 我可以把函数放在类方法中吗?像这样: <?php class test { function test1() { // do something function test1_1() { // something else } } } ?> 并以这种方式使用它:$test->test1->test1_1()您可以将函数放入方法(查找闭包)中。然而,你不能这样称呼他们 关闭的一个

我需要了解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");
    }
}

不,你不能。这将在中创建一个新函数,并将为您提供。

不,您不能这样调用
test1\u 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);
您可以使用(>=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();

我看不出在另一个函数中编写一个函数会实现什么。您不妨编写两个函数。

实际上,它不是在全局命名空间中创建的。它仅在方法范围内创建。该函数将不存在于该方法调用之外。但是关于错误的消息是正确的。不,当我说全局名称空间时,我指的是全局名称空间:)对,只在调用该方法一次之后。好吧,我想这是公平的。所以…不要因为PHP而责备你?