2010-09-01 14 views
7

मैं एक php newbie (लेकिन अन्य भाषाओं में लंबे समय तक डेवलपर) हूं और मैं "PHP, MySQL, & जावास्क्रिप्ट" में कुछ उदाहरण डीबी कनेक्शन का प्रयास कर रहा हूं। यह डीबी कनेक्शन चर (servername, उपयोगकर्ता नाम, पासवर्ड, डेटाबेस, आदि) शामिल करने के लिए एक उदाहरण फ़ाइल दिखाता है। मेरे पास एक php फ़ाइल है जिसमें मेरे द्वारा लिखे गए कुछ हद तक फ़ंक्शन हैं और इनमें से एक में कुछ SQL क्वेरी हैं। किसी भी कारण से, उस फ़ाइल में requ_once को कॉल करना किसी भी त्रुटि को आउटपुट नहीं करता है (मेरे पास E_ALL config'd है) फिर भी मेरे डेटाबेस php फ़ाइल में वे चर शून्य हैं।डेटाबेस कनेक्शन वैरिएबल को सही ढंग से शामिल करने के लिए Requ_once() का उपयोग करें

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

यहाँ मैं

क्या कर रहा db_login.php

<?php 
    $db_server = 'localhost'; 
    // .... 
?> 

functions.php

<?php 
    require_once('db_login.php'); 

    function myfunction() { 
     echo "$db_server"; 
     // ... 
    } 
?> 

मुझे पागल कॉल का एक उदाहरण है, लेकिन यह नहीं करना चाहिए काम करने के लिए काफी आसान हो?

उत्तर

5

चर आप db_login.php में घोषित वैश्विक हैं। अपने फ़ंक्शन में उन्हें एक्सेस करने के लिए, आपको $GLOBALS चर का उपयोग करने की आवश्यकता है, उदा। $GLOBALS['db_server'], या उन्हें global कीवर्ड का उपयोग करके अपने फ़ंक्शन के अंदर वैश्विक घोषित करें, उदा। global $db_server

7

PHPfunction scope जैसे Javascript नहीं है, तो आप functions.php के कार्यों के अंदर db_login.php में चर के लिए उपयोग नहीं है।

इससे निपटने के कई तरीके हैं। सर्वर नाम के आपके संभावित उपयोग के कारण वैश्विक constants शायद एक अच्छा समाधान होगा, क्योंकि कुछ भी उन्हें बदल नहीं सकता है।

अपने मामले में आप कर सकते हैं:

<?php 
    require_once('db_login.php'); 
     // You have access to $db_server here. 
     // Create a constant. 
    define("DB_SERVER", $db_server); 

    function myfunction() { 
      // Using a constant. Note that there is no "$". 
     echo DB_SERVER ; 
      // Constants are interpreted inside double quotes too 
     echo "\nMy constant is DB_SERVER"; 
     // ... 
    } 
?> 

अपने मामले एक निरंतर के रूप में सर्वर नाम होने में शायद उचित है। ,

myfunction($variable); 

    // by value 
function myfunction($pass_variable_to_me_by_value) 
{ 
    echo $pass_variable_to_me_by_value; 
    // ... 
} 

function myfunction(& $pass_variable_to_me_by_reference) 
{ 
    echo $pass_variable_to_me_by_reference; 
    // ... 
} 
अपने मामले में

एक नोट के रूप में, global का उपयोग कर: यदि आप कुछ है कि आप एक सच्चे चर के रूप में इलाज के लिए चाहते हैं के साथ काम कर रहे हैं, तो आप मान द्वारा या संदर्भ द्वारा समारोह में चर पारित कर सकते हैं किसी फ़ंक्शन के अंदर कीवर्ड या $GLOBALS सरणी essentially the same as passing by reference. है, लेकिन यदि आप वैश्विक दायरे से गुजर नहीं रहे हैं तो वे बहुत अलग हो सकते हैं (कक्षा में या उदाहरण के लिए किसी अन्य फ़ंक्शन से)।