কীভাবে পিএইচপি তে গ্লোবাল ভেরিয়েবল ঘোষণা করবেন?


168

আমার কোডটির কিছু আছে:

<?
    $a="localhost";
    function body(){
        global $a;
        echo $a;
    }

    function head(){
        global $a;
        echo $a;
    }

    function footer(){
        global $a;
        echo $a;
    }
?>

এক জায়গায় বিশ্বব্যাপী ভেরিয়েবল সংজ্ঞায়িত করার এবং ভেরিয়েবলটি $aসমস্ত ফাংশনে একবারে অ্যাক্সেসযোগ্য করার কোনও উপায় আছে কি? global $a;আরও ব্যবহার না করে ?


15
না সেখানে নেই। আপনি যদি globalকীওয়ার্ডটি পছন্দ করেন না , $GLOBALS['a']সমস্ত স্কোপগুলিতে সুপারগ্লোবাল ব্যবহার বিবেচনা করুন বা আপনার কার্যগুলিতে প্যারামিটারটি দেওয়ার কথা বিবেচনা করুন।
মাইকেল বারকোভস্কি

5
যদি এটি গুরুত্বপূর্ণ কিছু হয় তবে একটি সেশনের ভেরিও ব্যবহার করা যেতে পারে।
নিকস সিসিরাকিস

উত্তর:


259

$GLOBALSঅ্যারে পরিবর্তে ব্যবহার করা যেতে পারে:

$GLOBALS['a'] = 'localhost';

function body(){

    echo $GLOBALS['a'];
}

ম্যানুয়াল থেকে :

সমস্ত স্ক্রিনের রেফারেন্স সম্বলিত একটি সহযোগী অ্যারে যা বর্তমানে স্ক্রিপ্টের বিশ্ব স্কোপে সংজ্ঞায়িত হয়েছে। পরিবর্তনশীল নামগুলি অ্যারের কীগুলি।


আপনার যদি কিছু সাধারণ ভেরিয়েবলের প্রয়োজন হয় এমন ফাংশনগুলির একটি সেট থাকে তবে গ্লোবালের পরিবর্তে বৈশিষ্ট্য সহ একটি শ্রেণি ভাল পছন্দ হতে পারে:

class MyTest
{
    protected $a;

    public function __construct($a)
    {
        $this->a = $a;
    }

    public function head()
    {
        echo $this->a;
    }

    public function footer()
    {
        echo $this->a;
    }
}

$a = 'localhost';
$obj = new MyTest($a);

78

যদি ভেরিয়েবল পরিবর্তন না করে আপনি ব্যবহার করতে পারেন define

উদাহরণ:

define('FOOTER_CONTENT', 'Hello I\'m an awesome footer!');

function footer()
{
    echo FOOTER_CONTENT;
}

2
যখন FOOTER_CONTENTসংশোধন করার চেষ্টা করা হয় তখন কী ঘটে ? এটি ঠিক finalজাভা বা constসি, সি ++ এবং সি # এর মতো?
সিংহ

4
আপনি যদি দ্বিতীয়বার FOOTER_CONTENT সংজ্ঞায়িত করার চেষ্টা করেন, পিএইচপি এটি সম্পর্কে একটি নোটিশ ফেলে দেবে
ডেল

প্রতিবার পৃষ্ঠা লোড হওয়ার পরে আমার বর্তমান ইউনিক্স সময়কে গণনা করা দরকার, তারপরে কয়েকটি মান গণনা (ফাংশন) এ মানটি ব্যবহার করুন। "সংজ্ঞায়িত" আমার জন্য কাজ করেছে। প্রথমদিকে, আমি দেখতে পেলাম না যে "প্রতিধ্বনি FOOTER_CONTENT;" পূর্বের '$' ছিল না এবং আমি ত্রুটি পেয়েছি।
ব্যবহারকারী 208145

ভেরিয়েবল যদি পরিবর্তনশীল না হয় তবে এটি ভেরিয়েবলের নয়। তাই না ?!
সাজিদুর রহমান

29

Vari গ্লোবালস সুপার গ্লোবাল অ্যারেতে আপনার ভেরিয়েবল যুক্ত করুন

$GLOBALS['variable'] = 'localhost'; 

এবং এটি বিশ্বব্যাপী ব্যবহার করুন

অথবা আপনি ধ্রুবকটি ব্যবহার করতে পারেন যা স্ক্রিপ্ট জুড়ে অ্যাক্সেসযোগ্য

define('HOSTNAME', 'localhost');  

1
আপনি যদি 'ডিফাইন' ব্যবহার করেন তবে একবার সেট হয়ে গেলে আপনি কোনও সংজ্ঞা পরিবর্তন করতে পারবেন না!
রেজা এমএ

আপনার প্রথম উদাহরণে, এটি বলছে যে স্ক্রিপ্টের পরে '$ ভেরিয়েবলটিকে' লোকালহোস্ট 'বলা হয়?
জাচ স্মিথ

না আপনি যদি এই ভেরিয়েবলটি ব্যবহার করতে চান তবে আপনাকে এটি $ গ্লোবালস ['ভেরিয়েবল'] এর মতো ব্যবহার করতে হবে;
পঙ্কজ খায়নার

25

যদি কোনও ফাংশনের বাইরে কোনও ভেরিয়েবল ঘোষিত হয় তবে এর ইতিমধ্যে বৈশ্বিক সুযোগ রয়েছে। তাই ঘোষণা করার দরকার নেই। তবে যেখান থেকে আপনি এই পরিবর্তনশীলটিকে কল করছেন তার অবশ্যই এই পরিবর্তনশীলটির অ্যাক্সেস থাকতে হবে। যদি আপনি কোনও ফাংশনটির ভিতর থেকে কল করছেন তবে আপনাকে globalকীওয়ার্ডটি ব্যবহার করতে হবে :

$variable = 5;

function name()
{
    global $variable;

    $value = $variable + 5;

    return $value;  

}

কোনও ফাংশনের বাইরে গ্লোবাল কীওয়ার্ড ব্যবহার করা ত্রুটি নয়। আপনি যদি কোনও ফাংশনের অভ্যন্তরে এই ফাইলটি অন্তর্ভুক্ত করতে চান তবে আপনি ভেরিয়েবল হিসাবে ঘোষণা করতে পারেন global

config.php

global $variable;

$variable = 5;

other.php

function name()
{
    require_once __DIR__ . '/config.php';
}

আপনি $GLOBALSপাশাপাশি ব্যবহার করতে পারেন । এটি একটি সুপারগ্লোবাল তাই এটি সর্বত্র অ্যাক্সেস পেতে পারে।

$GLOBALS['variable'] = 5;

function name()
{
    echo $GLOBALS['variable'];
}

আপনার পছন্দ উপর নির্ভর করে আপনি যে কোন একটি চয়ন করতে পারেন।


9

এই উত্তরটি খুব দেরিতে তবে আমি যা করি তা বুলিয়ান, অ্যারে এবং পূর্ণসংখ্যার-প্রাথমিক মানগুলিকে বৈশ্বিক স্কোপ স্ট্যাটিক ভেরিয়েবল হিসাবে ধরে রাখে class যে কোনও ধ্রুবক স্ট্রিং যেমন সংজ্ঞায়িত করা হয়।

define("myconstant", "value"); 

class globalVars {

    static $a = false;

    static $b = 0;

    static $c = array('first' => 2, 'second' => 5);

}


function test($num) {

    if (!globalVars::$a) {

        $returnVal = 'The ' . myconstant . ' of ' . $num . ' plus ' . globalVars::$b . ' plus ' . globalVars::$c['second'] . ' is ' . ($num + globalVars::$b + globalVars::$c['second']) . '.';

        globalVars::$a = true;

    } else {

        $returnVal = 'I forgot';

    }

    return $returnVal;

}

echo test(9); ---> The value of 9 + 0 + 5 is 14.

echo "<br>";

echo globalVars::$a; ----> 1

staticকিওয়ার্ড অন্য ক্লাসে উপস্থিত থাকতে হবে $ একটি, $ খ Vars, এবং $ গ বিশ্বব্যাপী scoped করা হবে না।


এটি অনেক কারণেই একটি ভাল সমাধান। ক্লাস স্ট্যাটিকের জন্য মৌলিক ভেরিয়েবলের নামটিতে কয়েকটি অক্ষর যুক্ত হওয়া দরকার: জি :: $ নাম, যেখানে ঘোষণাপত্রটি এর মতো দেখায়: শ্রেণি জি {স্ট্যাটিক $ নাম, $ নাম 2;} নোট করুন যে জি সত্যিকার অর্থে বৈশ্বিক চলক হতে পারে, তবে E পারে কর্মচারীদের সম্পর্কিত ভেরিয়েবলের জন্য ব্যবহার করা হবে। পিএইচপি দ্বারা সমর্থিত পূর্ণ-স্কেল অবজেক্ট-ভিত্তিক দৃষ্টান্তের চেয়ে এটির সাথে প্রোগ্রাম করা সহজ। যদি ধ্রুবকগুলি সত্যই প্রয়োজন হয় তবে আপনি "স্থির" পরে ঘোষিত ভেরিয়েবলগুলির মতো "কনস্ট" এর পরে এগুলি ঘোষণা করতে পারেন - ডলারের চিহ্নগুলি রেখে দিন। জি :: উদাহরণ বিশ্বব্যাপী ধ্রুবকের উদাহরণ হতে পারে।
ডেভিড স্পেক্টর

5

আপনি যেভাবে প্রশ্নটি লিখেছিলেন সেটির উত্তর দিয়েছিলেন - 'সংজ্ঞা' ব্যবহার করুন। তবে একবার সেট হয়ে গেলে আপনি কোনও সংজ্ঞা পরিবর্তন করতে পারবেন না।

বিকল্পভাবে, ক্লাসে ধ্রুবক সহ কৌশলগুলি রয়েছে যেমন শ্রেণি :: ধ্রুবক যা আপনি ব্যবহার করতে পারেন। আপনি ক্লাসে স্ট্যাটিক প্রপার্টি ঘোষণা করে এগুলি পরিবর্তনশীল করতে পারেন, যদি আপনি পরিবর্তন করতে চান তবে স্থির সম্পত্তি সেট করার জন্য ফাংশন সহ with


5

আপনি কীওয়ার্ড চেষ্টা করতে পারেন useমধ্যে বন্ধ ফাংশন বা Lambdas এই আপনার উদ্দেশ্য ... পিএইচপি 7.0 যদিও দেখাচ্ছে। এটি এর চেয়ে ভাল নয়, তবে কেবল একটি বিকল্প।

$foo = "New";
$closure = (function($bar) use ($foo) {
    echo "$foo $bar";
})("York");

ডেমো | তথ্য


1

আসুন একটু আলাদা চিন্তা করুন:

class globe{
    static $foo = "bar";
}

এবং আপনি এটি আপনার পছন্দমতোভাবে ব্যবহার এবং সংশোধন করতে পারেন, যেমন:

function func(){
    echo globe::$foo;
}

0

আপনি যদি ভেরিয়েবলের পরিবর্তে প্রসেসালাল ফাংশনটি ব্যবহার করেন এবং তাদেরকে আপনার যেখানেই কল করুন।

আমি সাধারণত কনফিগারেশন মানগুলির সংগ্রহ করি এবং সেগুলি রিটার্ন স্টেটমেন্ট সহ একটি ফাংশনের ভিতরে রাখি। আমি কেবল যেখানে আমি গ্লোবাল মান ব্যবহার করা এবং নির্দিষ্ট ফাংশন কল করতে প্রয়োজন তা অন্তর্ভুক্ত।

function host()
{
   return "localhost";
}

0

$GLOBALS[] হয় সঠিক সমাধান, কিন্তু যেহেতু আমরা বিকল্প বিষয়ে কথা বলছি, একটি ফাংশন সহজে এই কাজ করতে পারেন:

function capital() {
    return my_var() . ' is the capital of Italy';
}

function my_var() {
    return 'Rome';
}

-19

আপনার আর গ্লোবাল ব্যবহার করা উচিত নয়, তারা পিএইচপি 5.4 এ উপলব্ধ নয়।


19
নিবন্ধের গ্লোবালগুলি সরানো হয়েছে। গ্লোবাল না।
ऐक 100100

7
লিখিত হিসাবে এই উত্তরটি ভুল এবং .ক্য 100 এর মন্তব্য প্রতিবিম্বিত করতে আপডেট করা উচিত। যদি গ্লোবালগুলি এখনও উপলব্ধ থাকে তবে দয়া করে গ্লোবাল ওয়ারগুলির কোন দিকগুলি পরিবর্তিত হয়েছে তা পরিষ্কার করুন y এটার মতো কিছু.
ক্র্যাশ করুন


@ রবার্ট কলম্বিয়া খুব আকর্ষণীয় পোস্ট, এবং আমি অন্যান্য উত্তরের জন্য এটি মনে রাখব, তবে, এটি এই বিশেষ ক্ষেত্রে প্রযোজ্য নয়। (আমি আশা করি তুমি ঠিক বাতলান কিভাবে একটি "না যে," এর জবাব হলো, মেটা ব্যবহার করছেন পারে বৈধ এবং আত্মপক্ষ সমর্থন এই এক হিসাবে নাও হতে;)) " " যে কি না " করতে পারেন একটি বৈধ উত্তর হতে । "-" হতে পারে "নয়" হয় "। " তবে কখনও কখনও, পরিবর্তে কিছুই করার প্রয়োজন হয় না you আপনি যদি কেবলমাত্র ভুল কাজটি করা বন্ধ করেন তবে সবকিছু যাদুতে আবার কাজ শুরু করবে " "- কোডটি" ভাঙ্গা "না হওয়ায় এখানে প্রয়োগ হয় না। ওপি কেবল কিছু করার মতো "কম টাইপিং" পদ্ধতি চায়। …
রবিন্টস

" এটি কি আসলে প্রশ্নের উত্তর দেওয়ার চেষ্টা করছে? বেশিরভাগ ক্ষেত্রেই এটি হয়। " - "সর্বাধিক", "সব" নয়। (আমি এমনকি "সর্বাধিক" নিয়ে বিতর্ক করব, তবে একটি অবগত তর্ক করার জন্য আমি এ জাতীয় যথেষ্ট উত্তর দেখিনি)) " এক্ষেত্রে তা তা নয়। " - এবং এই "উত্তর" এও একই কারণগুলির জন্য নয়: "সবচেয়ে খারাপ, মারফি উত্তরটি সমস্যার সমাধানের প্রস্তাব দেয় না। " এবং " এটি দেয় না প্রশ্নকারী একটি সরঞ্জাম বা একটি পদ্ধতি বা যেকোন কিছুতেই তার সমস্যার সমাধানের অনুরূপ "। …
রবিটিন্টস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.