Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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';s的闭包范围已确定,它与类声明有何关系?_Php_Oop_Functional Programming_Closures - Fatal编程技术网

PHP';s的闭包范围已确定,它与类声明有何关系?

PHP';s的闭包范围已确定,它与类声明有何关系?,php,oop,functional-programming,closures,Php,Oop,Functional Programming,Closures,我正在尝试用PHP创建私有类。为此,我编写了以下代码: <?php $UsesPrivateClass = function () { if (!class_exists('PrivateClass', false)) { class PrivateClass { function someUsefulMethod() { return 1; }

我正在尝试用PHP创建私有类。为此,我编写了以下代码:

<?php

$UsesPrivateClass = function () {
    if (!class_exists('PrivateClass', false)) {
        class PrivateClass
        {
            function someUsefulMethod()
            {
                return 1;
            }
        }


        class UsesPrivateClass
        {
            function __construct($needsData)
            {
                $this->privateClass = new PrivateClass();
            }

            function getValue()
            {
                return $this->privateClass->someUsefulMethod() + 1;
            }
        }
    }
    //Return a UsesPrivateClassFactory
    return function ($needsData) {
        return new UsesPrivateClass($needsData);
    };
};
$UsesPrivateClass = $UsesPrivateClass();

//Now you can access the methods and data of the private class, without exposing it to the global object!

$usesPrivateClassInstance = $UsesPrivateClass("data needed");

echo $usesPrivateClassInstance->getValue(); //Prints out 2

$x = new PrivateClass(); //Throws exception

PHP在定义类时不关心任何闭包,它始终是全局和公共可用的


无论您如何封装
类PrivateClass{}
,因此在执行
UsesPrivateClass()
后的最后一行没有异常。但是,如果不执行该函数,该类将不可用。

谢谢您的解释!