আমি কিছু কোড দিয়ে খনন করছিলাম এবং আমি কিছু কল পেয়েছি mySQL_fetch_array
। পিএইচপি কেস ফাংশন নাম সম্পর্কে সংবেদনশীল? আমি এটি কোথাও পড়ে মনে পড়ছি তবে এর কোনও উল্লেখ খুঁজে পাওয়া যায় না।
আমি কিছু কোড দিয়ে খনন করছিলাম এবং আমি কিছু কল পেয়েছি mySQL_fetch_array
। পিএইচপি কেস ফাংশন নাম সম্পর্কে সংবেদনশীল? আমি এটি কোথাও পড়ে মনে পড়ছি তবে এর কোনও উল্লেখ খুঁজে পাওয়া যায় না।
উত্তর:
টিএল; ডিআর: শ্রেণীর নামগুলি কেস-সংবেদনশীল, তবে সর্বদা ঘোষণার মতো একই ক্ষেত্রে ব্যবহার করে (ফাংশনগুলির সাথে একই)। এছাড়াও, ক্লাসগুলি সংজ্ঞায়িত করা হওয়ায় বিভিন্ন কেস দিয়ে ইনস্ট্যান্ট করা অটোলোডারদের সাথে সমস্যা তৈরি করতে পারে।
এছাড়াও, শ্রেণীর নামগুলি কেস-সংবেদনশীল:
<?php
class SomeThing {
public $x = 'foo';
}
$a = new SomeThing();
$b = new something();
$c = new sOmEtHING();
var_dump($a, $b, $c);
এই ফলাফলগুলি:
class SomeThing#1 (1) {
public $x =>
string(3) "foo"
}
class SomeThing#2 (1) {
public $x =>
string(3) "foo"
}
class SomeThing#3 (1) {
public $x =>
string(3) "foo"
}
সমস্যাটি অটোলয়েডার এবং কেস-সংবেদনশীল ফাইল-সিস্টেমগুলি ব্যবহার করছে (যেমন ext2 / 3/4), আপনি অবশ্যই ক্লাসের নামটি কল করতে হবে একই ক্ষেত্রে ক্লাসযুক্ত ফাইলটির নাম দেওয়া হয়েছে (শ্রেণীর নামটি কীভাবে আসলে কেস হয় না), বা ব্যবহার করুন strtolower
:
ক্লাস ফাইল:
<?php
// filename something.php
class SomeThing {
...
}
অটোলোডার ফাংশন ( __autoload
বা নিবন্ধকরণের জন্য একটি ফাংশন spl_autoload_register
)
function my_autloader($className) {
$filename = CLASSES_DIR . DIRECTORY_SEPARATOR . $className . '.php';
if (file_exists($filename)) {
require($filename);
}
}
এখন এই কোড সহ:
$a = new something(); // works
$b = new SomeThing(); // does not work
$c = new SOMETHING(); // does not work
আপনি যদি অটোলোডার কোডটিতে কোনও কল যোগ করেছেন তবে আপনি এই কাজটি (উদাহরণস্বরূপ: একটি অটোলোডার ব্যবহার করে সংবেদনশীল শ্রেণীর নাম কার্যকরভাবে কার্যকর করা) তৈরি করতে পারেন strtolower()
, তবে ফাংশনগুলির সাথে যেমন কোনও ক্লাস যেমন ঘোষণা করা হয়েছে তেমনভাবে উল্লেখ করা ভাল, শ্রেণীর নাম হিসাবে একই কেস সহ ফাইলের নাম আছে, অটোলোডার ব্যবহার করুন strtolower
এবং ব্যবহার এবং পছন্দগুলি ভুলে যান ।
পিএইচপি ভেরিয়েবলগুলিতে কেস সংবেদনশীল তবে ফাংশনগুলির ক্ষেত্রে এর মতো সমস্যা নেই output আপনি আউটপুট প্রদর্শনের জন্য নিম্নলিখিত বিবৃতিগুলি ব্যবহার করতে পারেন, সমস্ত একই ফলাফল প্রদর্শন করবে।
<?php
Echo "This is a test script";
ECHO "This is a test script";
echo "This is a test script";
?>
অন্যদিকে, আপনি যদি ভেরিয়েবলের কেস সংবেদনশীলতা পরিবর্তন করেন তবে এটি ত্রুটিটি দেখায়।
উদাহরণ:
<?php
$a=5;
echo $A;// It will show the error.
?>
আউটপুট:
Notice: Undefined variable: A in C:\xampp\htdocs\test.php on line 3
এবং পদ্ধতির নামগুলিও কেস-সংবেদনশীল। যেমন: -
<?php
class C {
public function method() { }
public function METHOD() { }
}
আউটপুট:
PHP Fatal error: Cannot redeclare C::METHOD() in ....php on line 6
প্রত্যেকের প্রতিক্রিয়া উপসংহারে। যদিও পিএইচপি পিএইচপি 5 এ এখনও পর্যন্ত সমস্ত ক্ষেত্রে চরিত্রের ক্ষেত্রে ধারাবাহিকতার প্রয়োজন হয় না।
সেরা অনুশীলন হবে
যখন ভেরিয়েবল (এর 'বাধ্যতামূলক) বা ফাংশন (এর' ,চ্ছিক, তবে প্রস্তাবিত) 'তে ফিরে আসে তখন সর্বদা একই ক্ষেত্রে ব্যবহার করুন।
আপনি কখনই জানেন না যে কোনও দিন ভোটটি পেল এবং আপনি কয়েক বছর আগে তৈরি হওয়া অ্যাপ্লিকেশনগুলিতে কেস পরিবর্তনের পুরো দুঃস্বপ্নটি সংরক্ষণ করবেন যা পিএইচপি-তে আপডেট দরকার।
আশা করি এটি যেভাবেই সহায়তা করবে।
এই হতে পারে খুব দেরী, কিন্তু ...
প্রত্যেকে ইতিমধ্যে এখানে জেনে গেছে: পিএইচপি ইঞ্জিন অক্ষরের ক্ষেত্রে যত্ন করে না।
এবং পিএইচপি বাগট্র্যাকারের উপর ভোট রয়েছে, যেখানে সংখ্যাগরিষ্ঠরাই বলেছেন: "হ্যাঁ, আমি কেস সেনসেটিভিটির সমর্থক"।
তবে আমি বিপরীত, কারণ আমার এমভিসি কাঠামোয় আমি কন্ট্রোলার অ্যাকশনটি বলে থাকি:
$currentController = new $controller($parameters);
$currentAction = $currentController->{$action}();
ইউআরএল থেকে যেমন $ নিয়ামক এবং $ পদক্ষেপ নেওয়া হয়।
ভাবুন, কোনও ব্যবহারকারী যদি আমার সাইটের লিঙ্ক প্রকাশ করে: https: // আমার-সাইট / মাইপার্টনারকন্ট্রোলার / মাই পার্টনার গ্যালারি
ক্লাসটির নামকরণ করা হয়েছে আমার পার্টনারকন্ট্রোলার ...
এর অর্থ পিএইচপি-র ক্লাস এবং ফাংশনগুলির নাম কেস সেনসিটিভ থাকলে কোনও দিনই এই পৃষ্ঠাটি লাভ করে না।
হ্যাঁ, আমি সর্বদা ঘোষিত কোড হিসাবে সমস্ত নাম ব্যবহার করি। তবে আমি প্রার্থনা করি তারা কখনও 'ফাংশন' এবং ক্লাসগুলির নাম সংবেদনশীল না করে make
ধন্যবাদ!