मुझे पता है कि यह एक पुराना प्रश्न है और सब कुछ है, लेकिन मुझे अभी भी लगता है कि मेरे पास कुछ उपयोगी इनपुट है। मैंने इसे एक अमूर्त वर्ग का उपयोग करके कार्यान्वित किया है जो मेरे सभी enums विस्तारित है। अमूर्त वर्ग में एक सामान्य toString() विधि होती है;
abstract class BaseEnum{
private final function __construct(){ }
public static function toString($val){
$tmp = new ReflectionClass(get_called_class());
$a = $tmp->getConstants();
$b = array_flip($a);
return ucfirst(strtolower($b[$val]));
}
}
//actual enum
final class UserType extends BaseEnum {
const ADMIN = 10;
const USER = 5;
const VIEWER = 0;
}
इस तरह आप आउटपुट में उपयोग करने के लिए मानव पठनीय स्ट्रिंग प्राप्त कर सकते हैं, जो प्रत्येक enum पर आधारित है। इसके अलावा, enum के आपके कार्यान्वयन, final
होने के कारण, विस्तारित नहीं किया जा सकता है और क्योंकि BaseEnum
में कन्स्ट्रक्टर private
है, इसे कभी भी तत्काल नहीं किया जा सकता है।
तो उदाहरण के लिए, यदि आप अपने प्रकार के साथ सभी उपयोगकर्ता नाम की एक सूची दिखाने के लिए आप की तरह
foreach($users as $user){
echo "<li>{$user->name}, ".UserType::toString($user->usertype)."</li>";
}
स्रोत
2012-03-29 08:35:54
कुछ भी नहीं है गंभीर, वास्तव में। क्लास फ़ंक्शन से त्रुटि कोड पास करने के तरीके के बारे में सोचें। मेरे लिए const ERR_SOME_ERROR = 'ERR_SOME_ERROR' अजीब लग रहा है, मैंने सोचा कि मेरा getLastError() फ़ंक्शन सरणी (5003 => 'ERR_SOME_ERROR', 5002 => 'ERR_SOME_ERR2') जैसे कुछ वापस कर सकता है। बस त्रुटि कोड और त्रुटि नाम लौटा है। खैर, जितना अधिक मैं इसके बारे में सोचता हूं, मैं शायद इसका उपयोग नहीं करूंगा (जैसा आपने बताया था असामान्य वाक्यविन्यास के लिए) :) –
को CURLE_ * निरंतर समर्थन के लिए भी इसकी आवश्यकता है जहां 'curl_multi_strerror' उपलब्ध नहीं था –
मुझे कुछ चाहिए " इस तरह को लिखने के बिना एक अच्छा त्रुटि आउटपुट प्रदान करने के लिए इस तरह हम स्थिरांक कोड के रूप में संग्रहीत कुछ त्रुटि कोड ट्रैक करते हैं। – Frug