簡體   English   中英

如何確定PHP的Closure范圍以及它與類聲明之間的關系?

[英]How is PHP's Closure scope determined and how does it relate to class declaration?

我正在嘗試在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

唯一的問題是最后一行$x = new PrivateClass(); //Throws exception $x = new PrivateClass(); //Throws exception ,不拋出異常。 我不知道為什么。 類聲明不是綁定到閉包對象嗎? 還是這是功能和面向對象的編程語言之間的粗糙邊緣之一(至少在PHP中實現)?

當您定義一個類時,PHP並不關心任何閉包,它始終是全局和公開可用的。

封裝class PrivateClass {} ,因此執行UsesPrivateClass()后的最后一行也不例外。 但是,如果不執行該功能,則該類將不可用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM