পিএইচপি ফাংশন কেস সংবেদনশীল?


101

আমি কিছু কোড দিয়ে খনন করছিলাম এবং আমি কিছু কল পেয়েছি mySQL_fetch_array। পিএইচপি কেস ফাংশন নাম সম্পর্কে সংবেদনশীল? আমি এটি কোথাও পড়ে মনে পড়ছি তবে এর কোনও উল্লেখ খুঁজে পাওয়া যায় না।


4
না তারা বলে মনে হয় না। পছন্দটি সাধারণত নিম্নতর হয়
জেসন

4
স্ট্যাকওভারফ্লো ডাব্লিকেট / প্রশ্নগুলি / 2749781/… । না, ফাংশনগুলি সংবেদনশীল নয়
বব Baddeley

রেফারেন্সের জন্য: এটি এখানে একটি নোট: ব্লকে php.net/manual/en/funitions.user-defined.php মাঝখানে সমাধিস্থ করা হয়েছে ।
মারিও

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

উত্তর:


100

আমি থেকে উদ্ধৃত করছি এই :

দ্রষ্টব্য: ফাংশন নামগুলি কেস-সংবেদনশীল, যদিও তাদের ঘোষণায় প্রদর্শিত হওয়ায় ফাংশনগুলি কল করা সাধারণত ভাল ফর্ম।

সুতরাং, দেখতে দেখতে ব্যবহারকারী-সংজ্ঞায়িত ফাংশনগুলি কেস-সংবেদনশীল নয়, পিএইচপি 5 কেস-সংবেদনশীল এর অধীনে ফাংশন / অবজেক্ট তৈরি করার পক্ষে একটি ভোট ছিল ।


4
পিএইচপি 5 ইতিমধ্যে বাইরে রয়েছে, আপনার একমাত্র আশা পিএইচপি 6 এবং আমার মনে হয় না তারা এই পদক্ষেপ নেবে। এটি সামান্য লাভের জন্য অনেকটা ভেঙে যায়।
মার্ক টমলিন

4
@ মার্ক টমলিন আমি একমত নই। সেরা অনুশীলন হ'ল ম্যানুয়ালটিতে একই কেস বজায় রাখা, সুতরাং এটি স্পষ্টতা বৃদ্ধি করার সাথে সাথে সামান্য ভাঙতে হবে।
বেন ডাউফিনি

12
কি দারুন. যে দু: খিত. যদিও ইমাগেসিআরএইটিএফআরওএমপিএনজি () কোডটি অবলম্বন করার একটি দুর্দান্ত উপায় ...
পন্টোমডন

8
যেহেতু উদ্ধৃতিটি "কেস-সংবেদনশীল" বলেছেন, কেন আপনি "সুতরাং এটি ব্যবহারকারী-সংজ্ঞায়িত কেস-সংবেদনশীল বলে মনে হচ্ছে"? যদি এটি টাইপো হয় তবে আপনার এটি ঠিক করা উচিত।
বার্মার

13
কি দারুন! কোডিংয়ের 7 বছর পরে এটি খুঁজে পাওয়া সত্যিই দুর্দান্ত!
দান


19

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


এছাড়াও, শ্রেণীর নামগুলি কেস-সংবেদনশীল:

<?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এবং ব্যবহার এবং পছন্দগুলি ভুলে যান ।


7

না, তারা না কেস সংবেদনশীল, কিন্তু, আপনি সবসময় ক্ষেত্রে ম্যানুয়াল যে, দৃঢ়তা জন্য ব্যবহার করা উচিত।

যাইহোক, ভেরিয়েবল হয় কেস সংবেদনশীল।


3

পিএইচপি ভেরিয়েবলগুলিতে কেস সংবেদনশীল তবে ফাংশনগুলির ক্ষেত্রে এর মতো সমস্যা নেই 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

2

এবং পদ্ধতির নামগুলিও কেস-সংবেদনশীল। যেমন: -

<?php
       class C { 

           public function method() { } 

           public function METHOD() { } 
       }

আউটপুট:

PHP Fatal error:  Cannot redeclare C::METHOD() in ....php on line 6

1

প্রত্যেকের প্রতিক্রিয়া উপসংহারে। যদিও পিএইচপি পিএইচপি 5 এ এখনও পর্যন্ত সমস্ত ক্ষেত্রে চরিত্রের ক্ষেত্রে ধারাবাহিকতার প্রয়োজন হয় না।

সেরা অনুশীলন হবে

যখন ভেরিয়েবল (এর 'বাধ্যতামূলক) বা ফাংশন (এর' ,চ্ছিক, তবে প্রস্তাবিত) 'তে ফিরে আসে তখন সর্বদা একই ক্ষেত্রে ব্যবহার করুন।

আপনি কখনই জানেন না যে কোনও দিন ভোটটি পেল এবং আপনি কয়েক বছর আগে তৈরি হওয়া অ্যাপ্লিকেশনগুলিতে কেস পরিবর্তনের পুরো দুঃস্বপ্নটি সংরক্ষণ করবেন যা পিএইচপি-তে আপডেট দরকার।

আশা করি এটি যেভাবেই সহায়তা করবে।


পুনরায় "কেসগুলির পরিবর্তনের পুরো দুঃস্বপ্নটি সংরক্ষণ করুন": না, আমার বোধগম্যতা হল যে যদি পরিবর্তনটি কখনও করা হয় তবে কেস-সংবেদনশীলতা একটি বিকল্প হতে পারে, এটি php.ini তে সেট করা থাকে। এইভাবে পিছনের সামঞ্জস্যতা সংরক্ষণ।
টুলমেকারস্টেভ

-2

এই হতে পারে খুব দেরী, কিন্তু ...

প্রত্যেকে ইতিমধ্যে এখানে জেনে গেছে: পিএইচপি ইঞ্জিন অক্ষরের ক্ষেত্রে যত্ন করে না।

এবং পিএইচপি বাগট্র্যাকারের উপর ভোট রয়েছে, যেখানে সংখ্যাগরিষ্ঠরাই বলেছেন: "হ্যাঁ, আমি কেস সেনসেটিভিটির সমর্থক"।

তবে আমি বিপরীত, কারণ আমার এমভিসি কাঠামোয় আমি কন্ট্রোলার অ্যাকশনটি বলে থাকি:

    $currentController = new $controller($parameters);
    $currentAction = $currentController->{$action}();

ইউআরএল থেকে যেমন $ নিয়ামক এবং $ পদক্ষেপ নেওয়া হয়।

ভাবুন, কোনও ব্যবহারকারী যদি আমার সাইটের লিঙ্ক প্রকাশ করে: https: // আমার-সাইট / মাইপার্টনারকন্ট্রোলার / মাই পার্টনার গ্যালারি

ক্লাসটির নামকরণ করা হয়েছে আমার পার্টনারকন্ট্রোলার ...

এর অর্থ পিএইচপি-র ক্লাস এবং ফাংশনগুলির নাম কেস সেনসিটিভ থাকলে কোনও দিনই এই পৃষ্ঠাটি লাভ করে না।

হ্যাঁ, আমি সর্বদা ঘোষিত কোড হিসাবে সমস্ত নাম ব্যবহার করি। তবে আমি প্রার্থনা করি তারা কখনও 'ফাংশন' এবং ক্লাসগুলির নাম সংবেদনশীল না করে make

ধন্যবাদ!


4
এটি সত্যিই খারাপ ... যদি আমি আমার সাইট / মাইলগইনপেজ / লগইনস্যাক্সেসে যাই এবং আপনি যে লগইন সাফল্য ফাংশনটি আমি যাচ্ছিলাম তাতে কিছুটা অনুমান করেছি বা কিছু জিনিস মুছতে সক্ষম হয়েছি ....
তিশাল্লাকা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.