[英]How to does Elasticache syntax relate to Memcache syntax (using PHP)?
[英]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.