2011-11-11 9 views
7

मैं वर्तमान में एक वेबसाइट प्रोग्रामिंग कर रहा हूं (PHP4 में)। मैं मूल्यों को बचाने की योजना बना रहा हूं, जो स्थिरता के दौरान रनटाइम के दौरान नहीं बदलते हैं। उदाहरण के लिए वे डेटाबेस के लिए लॉगिन-डेटा का संस्करण संख्या हैं।PHP में कॉन्स्टेंट का उपयोग कब और कैसे करें?

प्रश्न 1: क्या कोई (सुरक्षा प्रासंगिक) समस्याएं हैं जो स्थिरांक में डेटा सहेजने से उत्पन्न हो सकती हैं?

पल मैं परिभाषित करने और लगातार कॉल करने के लिए निम्न उपाय अपनाते हैं पर:

define("VERSION", "1.0"); 
echo "Current version: ".VERSION."."; // Result: "Current version: 1.0." 

एक बात यह है कि मुझे गुस्सा दिलाती है: मामला एक निरंतर में परिभाषित नहीं है, "गलत" चर नाम के बजाय लौटा दिया जाता है उदाहरण के लिए NULL

define("VERSION", "1.0"); 
echo "Current version: ".constant("VERSIONXXX")."."; // Result: "Current version: ." 

प्रश्न 2::

define("VERSION", "1.0"); 
echo "Current version: ".VERSIONXXX."."; // Result: "Current version: VERSIONXXX." 

एक समाधान मैं जब मैं गलती से प्रवेश किया एक गलत निरंतर नाम समारोह constant() उपयोग कर रहा है एक त्रुटि संदेश और वापसी मान "शून्य" पाने के लिए मिल गया मैं रोक सकता हूँ एक अलग तरीके से, क्या PHP गैर-मौजूदा चर का नाम देता है?

प्रश्न 3: क्या PHP में निरंतर का मान हमेशा constant() फ़ंक्शन का उपयोग करके वापस किया जाना चाहिए?

+4

क्या कोई कारण है कि आप PHP4 पर क्यों रह रहे हैं, जो अब सक्रिय नहीं है? – danielrsmith

उत्तर

3

: echo MY_CONSTANT
आप निरंतर के नाम (उदाहरण के लिए यह नाम एक चर में है) को नहीं जानते हैं, constant() का उपयोग नहीं प्रश्न 2: वास्तव में नहीं, लेकिन आप समायोजन कर सकते हैं।

(प्रश्न 1 :) error_reporting के कारण। आप PHP webserver कॉन्फ़िगर किया गया है कुछ त्रुटियों को छुपाएं।ग्रहण 'MY_CONST'

त्रुटि - आप अपनी स्क्रिप्ट सिर के

error_reporting(E_ALL); 

जोड़ते हैं तो आपको अपरिभाषित निरंतर MY_CONST के

उपयोग मिल जाएगा। दुर्भाग्यवश यह PHP के लंबे इतिहास से बाहर आने वाली समस्या है, कि स्थिरांक को तारों के रूप में व्याख्या किया जा सकता है।

तुम shure एक निरंतर पहली जगह आप परिभाषित का उपयोग कर सकते

if(defined('MY_CONSTANT') { 
    //do something 
} 

लेकिन मेरी व्यक्तिगत राय है कि इस जरूरत के लिए कई मामलों में नहीं होना चाहिए में स्थापित किया गया था, अकेले शब्द निरंतर के बाद से तात्पर्य नहीं किया जा सकता है, तो एक गारंटीकृत उपस्थिति। एकमात्र अपवाद जो मैं सोच सकता हूं वह सामान्य हेडर टेस्ट है।

if(!defined('MY_APP_IS_PRESENT')) { 
    die('You can not call this file on its own, please use index.php.'); 
} 

और एक आखिरी tipp: जाओ और अपने आप एक errorhandler कार्य करना, हो सकता है यहां तक ​​कि firephp साथ?

1

ठीक है, आप हमेशा सुनिश्चित करने के लिए defined फ़ंक्शन का उपयोग कर सकते हैं।

echo defined(VERSION) ? VERSION : ""; 

नहीं सबसे अच्छा जवाब है, लेकिन व्यावहारिक: एक त्रिगुट बयान के साथ संयुक्त, आप बस एक खाली स्ट्रिंग, जैसे कुछ गूंज सकता है?

defined() के लिए PHP मैनुअल http://php.net/manual/en/function.defined.php

6
  1. पर है आप एक निरंतर जो मौजूद नहीं है का उपयोग करने का प्रयास करते, पीएचपी स्वतः जिसके कारण आप VERSIONXXX देखें कि यह एक स्ट्रिंग के बजाय है मान लिया गया है,।

  2. आईआईआरसी अगर आप त्रुटि रिपोर्टिंग उचित स्तर पर हैं तो यह चेतावनी फेंकता है। यहां सबसे अच्छा समाधान यह सुनिश्चित करना है कि आपका कोड उचित निरंतर नामों का उपयोग करे।

  3. यदि आप निरंतर का नाम जानते हैं, तो इसे सीधे उपयोग करने के लिए यह सबसे आसान/सर्वोत्तम है।

    प्रश्न 3:: उलटे क्रम में

 
    $name = 'MY_CONSTANT'; 
    echo constant($name); 
संबंधित मुद्दे