PHP';s的闭包范围已确定,它与类声明有何关系?
我正在尝试用PHP创建私有类。为此,我编写了以下代码: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
$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()
后的最后一行没有异常。但是,如果不执行该函数,该类将不可用。谢谢您的解释!