পিএইচপি-তে একটি কনফিগার ফাইল তৈরি করা হচ্ছে


101

আমি আমার পিএইচপি প্রকল্পের জন্য একটি কনফিগার ফাইল তৈরি করতে চাই, তবে এটি করার সর্বোত্তম উপায়টি আমি নিশ্চিত।

আমার এখনও পর্যন্ত 3 টি ধারণা রয়েছে।

1-পরিবর্তনশীল

$config['hostname'] = "localhost";
$config['dbuser'] = "dbuser";
$config['dbpassword'] = "dbpassword";
$config['dbname'] = "dbname";
$config['sitetitle'] = "sitetitle";

2-ব্যবহার কনস্ট

define('DB_NAME', 'test');
define('DB_USER', 'root');
define('DB_PASSWORD', '');
define('DB_HOST', 'localhost');
define('TITLE', 'sitetitle');

3-ব্যবহার ডাটাবেস

আমি ক্লাসগুলিতে কনফিগারেশন ব্যবহার করব তাই কোন উপায়টি সবচেয়ে ভাল হবে বা যদি আরও ভাল উপায় থাকে তবে আমি নিশ্চিত নই।


12
4) একটি ini ফাইল ব্যবহার করুন। 5) একটি ওয়াইএএমএল ফাইল ব্যবহার করুন। 6) একটি JSON ফাইল ব্যবহার করুন। )) ... অনেকগুলি উপায় আছে ... কমপক্ষে বিচার করার জন্য কিছু মানদণ্ড নির্ধারণ করুন, সামগ্রিকভাবে "সেরা" নেই।
deceze

@ নির্ধারণ করুন দ্রুততম উপায় কী? (স্মৃতি এবং দ্রুত)
আলী আকবর আজিজি

এটি আপনার জন্য একটি আকর্ষণীয় পঠিত তারপর হওয়া উচিত: stackoverflow.com/questions/823352/...
eithed

4
আমি লারাভেল যেভাবে এটি ব্যবহার করে (যখন লারাভেলটি এটি ব্যবহার না করে)। আমি একটি ক্লাস তৈরি করি যা হোস্টের নামের উপর নির্ভর করে একটি নির্দিষ্ট কনফিগারেশন ফাইল লোড করে। আমি তারপর এটি ব্যবহার করে কল Config::get('key');পেস্টবিন.
com

উত্তর:


220

একটি সহজ তবে মার্জিত উপায় হ'ল একটি config.phpফাইল তৈরি করা (বা আপনি যা কিছু বলুন) কেবল একটি অ্যারে ফিরিয়ে দেয়:

<?php

return array(
    'host' => 'localhost',
    'username' => 'root',
);

এবং তারপর:

$configs = include('config.php');

10
আমি এই পদ্ধতিটিও পছন্দ করি - আমি মনে করি এটি একটি অন্তর্ভুক্ত ফাইলের মধ্যে কেবল একটি ভেরিয়েবল ঘোষণা করা এবং এটি আপনার স্ক্রিপ্টে থাকবে তা ধরে নিয়ে পরিষ্কার হওয়া ভাল
কলিন এম

কনফিগার ফাইল তৈরির এই উত্তর পদ্ধতিতে কোথায়? আমার মতো পিএইচপি নবজাতকের জন্য?
লুকা

@ লুকা আপনি var_export ফাংশন ব্যবহার করতে পারেন ।
হাসান বায়াত

77

একটি আইএনআই ফাইল ব্যবহার করা একটি নমনীয় এবং শক্তিশালী সমাধান! এটি সঠিকভাবে পরিচালনা করার জন্য পিএইচপি-র একটি দেশীয় ফাংশন রয়েছে । উদাহরণস্বরূপ, এটির মতো একটি আইএনআই ফাইল তৈরি করা সম্ভব:

app.ini

[database]
db_name     = mydatabase
db_user     = myuser
db_password = mypassword

[application]
app_email = mailer@myapp.com
app_url   = myapp.com

সুতরাং আপনাকে যা করতে হবে তা হল কল:

$ini = parse_ini_file('app.ini');

তারপরে আপনি $iniঅ্যারে ব্যবহার করে সহজেই সংজ্ঞাগুলি অ্যাক্সেস করতে পারেন ।

echo $ini['db_name'];     // mydatabase
echo $ini['db_user'];     // myuser
echo $ini['db_password']; // mypassword
echo $ini['app_email'];   // mailer@myapp.com

গুরুত্বপূর্ণ: সুরক্ষার কারণে আইএনআই ফাইল অবশ্যই একটি সর্বজনীন ফোল্ডারে থাকতে হবে


এটিও কি নিরাপদ? যদি কোনও ব্যবহারকারী আইএনআই ফাইলের পথটি অনুমান করে এবং তাদের ব্রাউজারে সেখানে যায়, তবে তারা কি ফাইলটিতে আছে তা দেখতে পাবে?
নিকগেমস

4
@NickGames, আপনি একটি অ পাবলিক ফোল্ডারে ফাইল করা হবে, অন্যথায় আপনি একটি গুরুতর নিরাপত্তা ঝুঁকি অধীনে হতে হবে
Marcio Mazzucato

4
@ নিকগেমস, দয়া করে পার্সে_ইনিফিল ফাইলের ডক্সে একটি
আর পিচেটা

20
আমি এই পদ্ধতির পছন্দ। বোনাস টিপ: app.ini.php এ ফাইলটির নাম পরিবর্তন করুন। তারপরে প্রথম লাইনে যুক্ত করুন ;<?php die(); ?>। যদি এই ফাইলটি দুর্ঘটনাক্রমে কোনও পাবলিক ফোল্ডারে উপস্থিত হয়, তবে এটি পিএইচপি ফাইল হিসাবে বিবেচিত হবে এবং প্রথম লাইনে মারা যাবে। যদি ফাইলটি সাথে পড়তে হয় parse_ini_fileতবে এটি প্রথম লাইনের মন্তব্য হিসাবে মন্তব্য করবে ;
অ্যান্ড্রেস

4
দ্রষ্টব্য: আইএনআই ফাইলের কোনও মানটিতে যদি কোনও অ-অক্ষরীয় অক্ষর থাকে তবে এটি ডাবল-কোট ( ") এ আবদ্ধ হওয়া দরকার । উদাহরণস্বরূপ, যে কোনও পাসওয়ার্ডে অ-অক্ষরীয় অক্ষর থাকে।
কী শ্যাং

25

আমি @hugo_leonardo এর করা একটি সামান্য বিবর্তন ব্যবহার সমাধান :

<?php

return (object) array(
    'host' => 'localhost',
    'username' => 'root',
    'pass' => 'password',
    'database' => 'db'
);

?>

আপনি পিএইচপি: এর $configs->hostপরিবর্তে অন্তর্ভুক্ত করার সময় এটি আপনাকে অবজেক্ট সিনট্যাক্স ব্যবহার করতে দেয় $configs['host']

এছাড়াও, যদি আপনার অ্যাপ্লিকেশনটি আপনার ক্লায়েন্টের পক্ষের (অ্যাংুলার অ্যাপের মতো) config.phpকনফিগার করে থাকে তবে আপনার এই ফাইলটিতে আপনার সমস্ত কনফিগার থাকতে পারে (জাভাস্ক্রিপ্টের জন্য একটির পরিবর্তে একটি ফাইল এবং পিএইচপি এর জন্য একটি ফাইল) কেন্দ্রীভূত থাকতে পারে। কৌশলটি তখন অন্য একটি পিএইচপি ফাইল থাকতে পারে যা echoকেবলমাত্র ক্লায়েন্টের পাশের তথ্য (আপনি যে ডাটাবেস সংযোগের স্ট্রিংয়ের মতো প্রদর্শন করতে চান না এমন তথ্য প্রদর্শন এড়ানোর জন্য) থাকবে। এটি বলুন get_app_info.php:

<?php

    $configs = include('config.php');
    echo json_encode($configs->app_info);

?>

উপরোক্ত ধরে নেওয়া আপনার config.phpএকটি app_infoপ্যারামিটার ধারণ করে :

<?php

return (object) array(
    'host' => 'localhost',
    'username' => 'root',
    'pass' => 'password',
    'database' => 'db',
    'app_info' => array(
        'appName'=>"App Name",
        'appURL'=> "http://yourURL/#/"
    )
);

?>

সুতরাং আপনার ডাটাবেসের তথ্য সার্ভারের পাশে থাকে, তবে আপনার অ্যাপ্লিকেশন তথ্যটি আপনার জাভাস্ক্রিপ্ট থেকে অ্যাক্সেসযোগ্য, উদাহরণস্বরূপ এক $http.get('get_app_info.php').then(...);ধরণের কল।


কেন এটি একটি জিনিস করা?
দ্য

4
এটিকে একটি বস্তু তৈরি করে ডেটা পরিচালনা করা অনেক সহজ করে তোলে। উদাহরণস্বরূপ app_infoজাভাস্ক্রিপ্টে কোডের ন্যূনতম লাইন সহ একটি JSON হিসাবে সমস্ত পরামিতি পাওয়ার অনুমতি দেয় ।
BoDeX

পিএইচপি 5 থেকে অবজেক্টগুলির রেফারেন্স দ্বারা পাস করার একটি পার্শ্ব-প্রতিক্রিয়াও রয়েছে এটি ভাল জিনিস হতে পারে বা নাও হতে পারে। অ্যারেগুলি মান দ্বারা পাস করা হয় (তবে COW হিসাবে প্রয়োগ করা হয়) তাই কনফিগার বস্তুর পরিবর্তে কনফিগার অ্যারে ব্যবহার করা আরও ভাল।
মিক্কো রেন্টালাইনেন

@ BoDeX আমি সর্বদা এইভাবে পছন্দ করি এবং বেশিরভাগ নিবন্ধে এটি অনুকূল পছন্দ বলে মনে হয় তবে আমি কীভাবে ক্লাসের মাধ্যমে এটি অ্যাক্সেস করব? আমি সুরক্ষা নিবন্ধে পড়েছি যে গ্লোবাল ভেরিয়েবলগুলি তৈরি করা ভাল ধারণা নয় তবে আপনি কী পরামর্শ দিচ্ছেন?
কেভলিগ

22

আপেক্ষিক যোগ্যতা / দুর্বলতার সাথে আমি যে বিকল্পগুলি দেখছি সেগুলি হ'ল:

ফাইল ভিত্তিক প্রক্রিয়া

এর জন্য আপনার কোডটি আইএনআই ফাইল সন্ধানের জন্য নির্দিষ্ট স্থানে সন্ধান করা প্রয়োজন। এটি সমাধান করা একটি কঠিন সমস্যা এবং এটি সর্বদা বড় পিএইচপি অ্যাপ্লিকেশনগুলিতে ফসল কাটায়। তবে আপনাকে পিএইচপি কোডটি অনুসন্ধানের জন্য সমস্যাটি সমাধান করতে হবে যা রানটাইমটিতে সংযুক্ত / পুনরায় ব্যবহৃত হবে।

এর সাধারণ পন্থাগুলি হ'ল সর্বদা আপেক্ষিক ডিরেক্টরিগুলি ব্যবহার করা বা বর্তমান ডিরেক্টরি থেকে অ্যাপলিকেশনটির বেস ডিরেক্টরিতে নির্দিষ্টভাবে নামের একটি ফাইল সন্ধানের জন্য উপরের দিকে অনুসন্ধান করা।

কনফিগার ফাইলগুলির জন্য ব্যবহৃত সাধারণ ফাইল ফর্ম্যাটগুলি হ'ল পিএইচপি কোড, আইএনআই ফর্ম্যাট করা ফাইল, জেএসএন, এক্সএমএল, ওয়াইএএমএল এবং সিরিয়ালযুক্ত পিএইচপি

পিএইচপি কোড

এটি বিভিন্ন ডেটা স্ট্রাকচারের উপস্থাপনের জন্য বিশাল পরিমাণে নমনীয়তা সরবরাহ করে এবং (পার্সড কোডটি অন্তর্ভুক্ত বা প্রয়োজনের মাধ্যমে প্রক্রিয়াজাতকরণ ধরে নেওয়া) পার্সড কোডটি অপকড ক্যাশে থেকে উপলব্ধ থাকবে - একটি পারফরম্যান্স সুবিধা দেয়।

Include_path অতিরিক্ত কোড উপর নির্ভর না করেই ফাইল সম্ভাব্য অবস্থানগুলির সংক্ষেপ জন্য একটি উপায় প্রদান করে।

অন্যদিকে, কোড থেকে কনফিগারেশন আলাদা করার অন্যতম প্রধান কারণ হ'ল পৃথক দায়িত্ব। এটি রানটাইমে অতিরিক্ত কোড ইনজেকশন দেওয়ার জন্য একটি রুট সরবরাহ করে।

কনফিগারেশনটি যদি কোনও সরঞ্জাম থেকে তৈরি করা হয়, তবে সরঞ্জামটিতে ডেটা বৈধকরণ করা সম্ভব হতে পারে, তবে এইচটিএমএল, ইউআরএল, মাইএসকিউএল স্টেটমেন্ট, শেল কমান্ডের উপস্থিতি হিসাবে পিএইচপি কোড এম্বেড করার জন্য ডেটা এড়াতে কোনও স্ট্যান্ডার্ড ফাংশন নেই ... ।

সিরিয়ালযুক্ত ডেটা এটি স্বল্প পরিমাণে কনফিগারেশনের জন্য তুলনামূলকভাবে দক্ষ (প্রায় 200 আইটেম পর্যন্ত) এবং কোনও পিএইচপি ডেটা কাঠামো ব্যবহারের অনুমতি দেয়। ডেটা ফাইল তৈরি / পার্স করার জন্য এর খুব সামান্য কোডের প্রয়োজন (যাতে পরিবর্তে আপনি ফাইলটি কেবলমাত্র যথাযথ অনুমোদনের মাধ্যমেই লিখিত হয়েছে তা নিশ্চিত করার জন্য আপনার প্রচেষ্টা ব্যয় করতে পারেন)।

ফাইলে লেখা লিখিত সামগ্রী থেকে বেরিয়ে আসা স্বয়ংক্রিয়ভাবে পরিচালনা করা হয়।

যেহেতু আপনি অবজেক্টগুলিকে সিরিয়ালাইজ করতে পারেন তাই এটি কনফিগারেশন ফাইল (__ওয়াকআপ ম্যাজিক পদ্ধতি) পড়ে কেবল কোডের জন্য আবেদন করার সুযোগ তৈরি করে।

কাঠামোগত ফাইল

কোড আবেদনের অপসারণের সময় মার্সেল বা জেএসওএন বা এক্সএমএল দ্বারা প্রস্তাবিত আইএনআই ফাইল হিসাবে এটি সংরক্ষণ করা একটি পিএইচপি ডেটা স্ট্রাকচারে (এবং এক্সএমএল ব্যতীত, ডাটা এড়ানোর জন্য এবং ফাইলটি তৈরি করতে) ফাইলকে ম্যাপ করার জন্য একটি সহজ এপিআই সরবরাহ করে while সিরিয়ালযুক্ত পিএইচপি ডেটা ব্যবহার করে দুর্বলতা।

এটির ক্রিয়াকলাপযুক্ত ডেটার অনুরূপ কর্মক্ষমতা বৈশিষ্ট্য থাকবে।

ডাটাবেস স্টোরেজ

এটি আপনার পক্ষে বিপুল পরিমাণে কনফিগারেশন রয়েছে তবে এটি বর্তমান কাজের জন্য যা প্রয়োজন তা বেছে বেছে বিবেচনা করা হয় - আমি অবাক হয়ে গিয়েছিলাম যে প্রায় 150 ডেটা আইটেমের চেয়ে স্থানীয় মাইএসকিউএল উদাহরণ থেকে ডেটা পুনরুদ্ধার করা আরও দ্রুত ছিল একটি ডেটা ফাইলে আনসিরিয়ালাইজ করুন।

আপনি আপনার ডাটাবেসের সাথে সংযোগ করতে ব্যবহার করেন এমন শংসাপত্রগুলি সংরক্ষণ করার পক্ষে এটি ভাল জায়গা নয়!

কার্যকর করার পরিবেশ

আপনি কার্যকর করতে পারেন পরিবেশ নির্ধারণের পরিবেশে মানগুলি সেট করতে পারেন পিএইচপি চলছে।

এটি কনফিগারেশনের জন্য নির্দিষ্ট জায়গায় সন্ধানের জন্য পিএইচপি কোডের যে কোনও প্রয়োজনীয়তা সরিয়ে দেয়। OTOH এটি প্রচুর পরিমাণে ডেটাতে ভাল স্কেল করে না এবং রানটাইমে সর্বজনীনভাবে পরিবর্তন করা শক্ত।

ক্লায়েন্ট উপর

কনফিগারেশন ডেটা সংরক্ষণের জন্য আমি উল্লেখ না করে একটি জায়গা ক্লায়েন্টের কাছে। আবার নেটওয়ার্কের ওভারহেডের অর্থ হ'ল এটি বড় পরিমাণে কনফিগারেশনে ভাল স্কেল করে না। এবং যেহেতু শেষ ব্যবহারকারীর ডেটার উপর নিয়ন্ত্রণ রয়েছে তাই এটি অবশ্যই এমন ফর্ম্যাটে সংরক্ষণ করতে হবে যেখানে কোনও ছিটেফেলা সনাক্তকরণযোগ্য (যেমন একটি ক্রিপ্টোগ্রাফিক স্বাক্ষরের সাহায্যে) এবং কোনও তথ্য যা তার প্রকাশের মাধ্যমে আপোস করা উচিত নয় (যেমন বিপরীতক্রমে এনক্রিপ্ট করা হয়) ted

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

নেটওয়ার্ক ডিরেক্টরিগুলি কনফিগারেশন তথ্য সঞ্চয় করার জন্য আরও একটি আকর্ষণীয় জায়গা হ'ল ডিএনএস / এলডিএপি। এটি অল্প সংখ্যক ক্ষুদ্র তথ্যের টুকরোটির জন্য কাজ করবে - তবে আপনাকে 1 ম সাধারণ ফর্মের সাথে আটকে থাকার দরকার নেই - বিবেচনা করুন, উদাহরণস্বরূপ এসপিএফ

অবকাঠামো ক্যাচিং, প্রতিলিপি এবং বিতরণ সমর্থন করে। সুতরাং এটি খুব বড় অবকাঠামোগত জন্য ভাল কাজ করে।

সংস্করণ নিয়ন্ত্রণ সিস্টেম

কনফিগারেশন, যেমন কোড পরিচালনা করা উচিত এবং সংস্করণটি নিয়ন্ত্রিত হওয়া উচিত - সুতরাং আপনার ভিসি সিস্টেম থেকে সরাসরি কনফিগারেশন পাওয়া একটি কার্যকর সমাধান solution তবে প্রায়শই এটি একটি উল্লেখযোগ্য পারফরম্যান্সের সাথে আসে যা ওভারহেড তাই ক্যাশে রাখা ভাল।


6

ভাল - আপনার ডাটাবেস কনফিগারেশন ডেটা একটি ডাটাবেসে সংরক্ষণ করা এক ধরণের অসুবিধা হবে - আপনি কি ভাবেন না?

তবে প্রকৃতপক্ষে, এটি একটি বেশ ভারী মতামতযুক্ত প্রশ্ন কারণ কোনও শৈলী সত্যই কাজ করে এবং এটি সবই পছন্দসই বিষয়। ব্যক্তিগতভাবে আমি কনস্ট্যান্টের পরিবর্তে কনফিগারেশন ভেরিয়েবলের জন্য যাব - সাধারণত কারণ আমি প্রয়োজনে বিশ্বব্যাপী জিনিস পছন্দ করি না। আমার কোডবেসের কোনও ফাংশনই সহজেই আমার ডাটাবেস পাসওয়ার্ড (আমার ডাটাবেস সংযোগের যুক্তি ব্যতীত) অ্যাক্সেস করতে সক্ষম হবে না - তাই আমি এটি সেখানে ব্যবহার করব এবং সম্ভবত এটি ধ্বংস করে দেব।

সম্পাদনা করুন : আপনার মন্তব্যের জবাব দেওয়ার জন্য - কোনও পার্সিং মেকানিজম দ্রুততম হবে না (আইএনআই, জেসন, ইত্যাদি) - তবে এগুলি আপনার আবেদনের অংশও নয় যা গতি পার্থক্যের কারণে অনুকূলিতকরণের জন্য আপনাকে সত্যই মনোনিবেশ করতে হবে এই জাতীয় ছোট ফাইলের জন্য তুচ্ছ হন।


2

সংজ্ঞাটি বিশ্বব্যাপী ব্যবহারের প্রয়োজন ছাড়াই আপনার শ্রেণীর সর্বত্র ধ্রুবককে উপলব্ধ করবে, যখন ভেরিয়েবলটি ক্লাসে বিশ্বব্যাপী প্রয়োজন, আমি ডিফাইন ব্যবহার করব। তবে আবার, প্রোগ্রাম প্রয়োগের সময় যদি ডিবি প্যারামগুলি পরিবর্তন হয় তবে আপনি ভেরিয়েবলের সাথে আটকে থাকতে পারেন।


পিএইচপি এক্সিকিউট করার দ্রুততম উপায় কী? কনট বা ভার?
আলী আকবর আজিজি

4
@ কুকার সংজ্ঞায়িত পরিবর্তনগুলি ভেরিয়েবলের সংজ্ঞা দেওয়ার চেয়ে উল্লেখযোগ্যভাবে ধীর। তবে সেগুলি ব্যবহার করা কিছুটা দ্রুত। যেহেতু এগুলি এক জায়গায় ব্যবহার করা হচ্ছে, ভেরিয়েবলগুলি সামগ্রিকভাবে উচ্চতর পারফরম্যান্স সরবরাহ করবে।
কলিন এম

"উল্লেখযোগ্যভাবে" এটির জন্য কিছুটা ভারী শব্দ, আপনি যদি এইভাবে এটির দিকে তাকিয়ে থাকেন তবে সম্ভবত আপনার পিএইচপি ডে লোকের সাথে যোগাযোগ করা উচিত এবং তাদের ক্রমাগত সমর্থন সরিয়ে দিতে বলুন!
phpalix

@ পিপালিক্স একটি ধ্রুবককে নির্ধারণ করা একই মান সহ একটি ভেরিয়েবল সংজ্ঞায়নের চেয়ে ধীরে ধীরে 10-20x হতে পারে anywhere আমি বলব যে তাৎপর্যপূর্ণ। তবে, আপনি যদি আপনার অ্যাপ্লিকেশন জুড়ে ধ্রুবকটি ভারীভাবে ব্যবহার করেন - তবে এটি খুব ভাল দিতে পারে। তবে এটি একবার ব্যবহার করার জন্য ধ্রুবক তৈরি করার পরামর্শ দেওয়া হয় না।
কলিন এম

2

আপনি যদি মনে করেন যে কোনও কারণে আপনি 1 ডিবি এর বেশি ব্যবহার করছেন তবে ভেরিয়েবলটি নিয়ে যান কারণ আপনি সম্পূর্ণ ভিন্ন ডিবিতে স্যুইচ করতে একটি প্যারামিটার পরিবর্তন করতে সক্ষম হবেন। অর্থাত্ পরীক্ষার জন্য, অটোব্যাকআপ ইত্যাদি


2

আপনি একটি কনফিগার শ্রেণীর জাদুকরী স্থির বৈশিষ্ট্য তৈরি করতে পারেন

class Config 
{
    static $dbHost = 'localhost';
    static $dbUsername = 'user';
    static $dbPassword  = 'pass';
}

তারপরে আপনি এটিকে সহজভাবে ব্যবহার করতে পারেন:

Config::$dbHost  

কখনও কখনও আমার প্রকল্পগুলিতে আমি কনফিগারেশন ডেটা অ্যাক্সেস করতে একটি ডিজাইনের প্যাটার্ন সিঙ্গলটন ব্যবহার করি। এটি ব্যবহারে খুব আরামদায়ক।

কেন?

উদাহরণস্বরূপ আপনার প্রকল্পে আপনার কাছে 2 ডেটা উত্স রয়েছে। এবং আপনি তাদের থেকে ডাইন সক্ষম করতে পারবেন সক্ষম করতে পারেন।

  • mysql
  • json

কোথাও কনফিগারেশনের ফাইল আপনি চয়ন করেছেন:

$dataSource = 'mysql' // or 'json'

আপনি যখন সোর্স পুরো অ্যাপ্লিকেশনটিতে নতুন ডেটা উত্সটিতে জোরে স্যুইচ পরিবর্তন করেন, ঠিকঠাক কাজ করুন এবং কোডে পরিবর্তন দরকার নেই।

উদাহরণ:

কনফিগার:

class Config 
{
  // ....
  static $dataSource = 'mysql';
  / .....
}

একক শ্রেণী:

class AppConfig
{
    private static $instance;
    private $dataSource;

    private function __construct()
    {
        $this->init();
    }

    private function init()
    {
        switch (Config::$dataSource)
        {
            case 'mysql':
                $this->dataSource = new StorageMysql();
                break;
            case 'json':
                $this->dataSource = new StorageJson();
                break;
            default:
                $this->dataSource = new StorageMysql();
        }
    }

    public static function getInstance()
    {
        if (empty(self::$instance)) {
            self::$instance = new self();
        }
        return self::$instance;
    }

    public function getDataSource()
    {
        return $this->dataSource;
    }
}

... এবং আপনার কোডে কোথাও (যেমন কোনও পরিষেবা শ্রেণিতে):

$container->getItemsLoader(AppConfig::getInstance()->getDataSource()) // getItemsLoader need Object of specific data source class by dependency injection

আমরা সিস্টেমের যে কোনও জায়গা থেকে অ্যাপকনফিগ অবজেক্টটি পেতে পারি এবং সর্বদা একই অনুলিপি পেতে পারি (স্থিতির জন্য ধন্যবাদ)। ক্লাসের init () পদ্ধতিটিকে ইন কনস্ট্রাক্টর বলা হয়, যা কেবলমাত্র একটি কার্যকর করার গ্যারান্টি দেয়। উদ্যোগ () বডি চেক কনফিগার $ ডেটাসোর্সের মান এবং নির্দিষ্ট ডেটা উত্স শ্রেণীর নতুন অবজেক্ট তৈরি করে। এখন আমাদের স্ক্রিপ্টটি বস্তু পেতে এবং এটিতে কাজ করতে পারে, কোন নির্দিষ্ট বাস্তবায়নটি আসলে বিদ্যমান তা জেনেও না।


1

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


4
আমি জানি, তবে আপনি কীভাবে আপনার ডেটা বেস ফাইলটি ভেরিয়েবল বা কনস্টের সাথে সেভ করবেন? এবং কেন?
আলী আকবর আজিজি

0

এই আমার পথ।

<?php

define('DEBUG',0);

define('PRODUCTION',1);



#development_mode : DEBUG / PRODUCTION

$development_mode = PRODUCTION;



#Website root path for links

$app_path = 'http://192.168.0.234/dealer/';



#User interface files path

$ui_path = 'ui/';

#Image gallery path

$gallery_path = 'ui/gallery/';


$mysqlserver = "localhost";
$mysqluser = "root";
$mysqlpass = "";
$mysqldb = "dealer_plus";

?>

কোন সন্দেহ কমেন্ট করুন


4
হ্যালো! আপনি দয়া করে ব্যবহারের একটি উদাহরণ স্থাপন করতে পারেন? আপনাকে ধন্যবাদ
নিক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.