পিএইচপি ক্লাস পদ্ধতিতে একটি শীর্ষস্থানীয় আন্ডারস্কোরের সাথে চুক্তি কী?


155

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

public function _foo()

...পরিবর্তে...

public function foo()

আমি বুঝতে পারি যে শেষ পর্যন্ত এটি ব্যক্তিগত পছন্দের দিকে নেমে আসে তবে আমি ভাবছিলাম যে এই অভ্যাসটি কোথা থেকে এসেছে সে সম্পর্কে কারও কিছু অন্তর্দৃষ্টি রয়েছে কিনা।

আমার ধারণা হ'ল এটি সম্ভবত পিএইচপি 4 থেকে বহন করা হচ্ছে, ক্লাসের পদ্ধতিগুলি সুরক্ষিত বা ব্যক্তিগত হিসাবে চিহ্নিত করার আগে "শ্রেণীর বাইরে থেকে এই পদ্ধতিটিকে কল করবেন না" বোঝানোর উপায় হিসাবে। তবে, আমার কাছে এটিও ঘটেছিল যে এটির কোথাও কোথাও একটি ভাষা উদ্ভূত হয়েছে (একটি ভাষা) যার সাথে আমি পরিচিত নই বা এর পিছনে ভাল যুক্তি থাকতে পারে যা আমি জেনে উপকৃত হব।

কোনও চিন্তা, অন্তর্দৃষ্টি এবং / অথবা মতামত প্রশংসা করা হবে।


9
: আপডেট করুন 2014: এটা সরকারিভাবে সেকেলে বাক্য গঠন github.com/php-fig/fig-standards/blob/master/accepted/...
Sliq

উত্তর:


155

এটি অবজেক্ট ওরিয়েন্টেড পিএইচপি (পিএইচপি 4) এর খারাপ পুরানো দিনগুলি থেকে। ওওর বাস্তবায়নটি বেশ খারাপ ছিল এবং এতে ব্যক্তিগত পদ্ধতির মতো জিনিস অন্তর্ভুক্ত ছিল না। ক্ষতিপূরণ দেওয়ার জন্য, পিএইচপি বিকাশকারীরা এমন পদ্ধতিগুলি উপস্থাপিত করেছিলেন যেগুলি আন্ডারস্কোরের সাথে ব্যক্তিগত করার উদ্দেশ্যে করা হয়েছিল। কিছু পুরানো ক্লাসে আপনি /**private*/ __foo() {এটিকে কিছু অতিরিক্ত ওজন দিতে দেখবেন ।

আমি বিকাশকারীদের তাদের সমস্ত পদ্ধতি আন্ডারস্কোর দিয়ে প্রাক্কৃত করার কথা কখনও শুনিনি, তাই এর কারণ কী তা ব্যাখ্যা করতে শুরু করতে পারছি না।


12
আমি আমার কন্ট্রোলারগুলিতে এমন পদ্ধতিগুলির আগে একটি আন্ডারস্কোর রাখি যা শ্রেণীর জন্য ব্যক্তিগত এবং রাউটিংয়ে অব্যবহৃত। যেহেতু আমি আমার নিজস্ব কাঠামো নিয়ে কাজ করি, এটি সুরক্ষা যুক্ত করে কারণ আমি রুটগুলির মধ্যে নিয়ন্ত্রকের নামগুলিতে কোনও শীর্ষস্থানীয় আন্ডারস্কোরের নীতিটি প্রয়োগ করি না। তবে এটি নিয়ামক প্রতি খুব কম 1-2 পদ্ধতি অতিক্রম করে।
রবার্ট কে

6
কনভেনশন দ্বারা, পার্ল দিয়ে, আন্ডারস্কোর দিয়ে শুরু পদ্ধতিটি ব্যক্তিগত। তবে এটি কেবল একটি সম্মেলন। আসলে, এই পদ্ধতিগুলি এখনও শ্রেণীর বাইরে থেকে অ্যাক্সেসযোগ্য।
লুক এম

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

জোহান - রিফ্যাক্টরিং একটি উপদ্রব? আমার সম্পাদকের একটি বৈশিষ্ট্য রয়েছে "অনুসন্ধান এবং প্রতিস্থাপন" নামে। দুর্দান্ত কাজ!
ডেভওয়ালি

এটি একটি সি # কনভেনশন যা আপনি ব্যবহার করতে পারেন, ঠিক একটি আন্ডারস্কোর সহ ব্যক্তিগত সদস্যদের উপসর্গ করতে। সুতরাং এটি একইভাবে করার জন্য এটি একটি জেন্ডার ফ্রেমওয়ার্ক 1 (2012) সম্মেলন ছিল।
alpham8

73

আমি বিশ্বাস করি পিএইচপি জন্য নিয়মাবলী এই ধরনের জন্য সবচেয়ে প্রামাণিক উৎস এখনই হবে PSR-2: স্টাইল গাইড কোডিং কারণ পার্সি-জাতির প্রাচীন শাস্ত্রগ্রন্থ ফ্রেমওয়ার্ক অংশ PSR :

সুরক্ষিত বা ব্যক্তিগত দৃশ্যমানতা নির্দেশ করার জন্য সম্পত্তির নামগুলি একটি একক আন্ডারস্কোর দিয়ে উপসর্গ করা উচিত নয়।


9
আমি মনে করি নামকরণের কনভেনশনটি কোনও ভাষা ভালবাসার কারণ নয়।
sepehr

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

এই উত্তরটি সঠিক। এটি পুরো ম্যাজেন্টোতে জঘন্য স্থান জুড়ে এবং নীচে স্লিক দ্বারা উল্লিখিত হিসাবে, এটি একটি সম্মেলন যা সাধারণত হ্রাস করা হয়।
সিলিকনরোক স্টার

এটি সম্পর্কিত আপডেট লিঙ্ক এখানে। ফ্রেমওয়ার্ক.জেন্ড.
com

এফওয়াইআই (এবং @ জোজেডেভন) জেন্ডে ২.৪ কয়েক মাস আগে মুক্তি পেয়েছিল এবং তারা এখনও ব্যক্তিগত এবং সুরক্ষিত ফ্রেমওয়ার্কের জন্য আন্ডারস্কোর ব্যবহার করে ।
জেমস

40

এখন, ২০১৩ সালে, এটি পিএসআর -২ কোডিং গাইডলাইন দ্বারা "সরকারীভাবে" খারাপ স্টাইল :

সুরক্ষিত বা ব্যক্তিগত দৃশ্যমানতা নির্দেশ করার জন্য সম্পত্তির নামগুলি একক আন্ডারস্কোর দিয়ে উপসর্গ করা উচিত নয় `

সূত্র: https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md


6
অনুসারে PSR-2-> "উচিত নয়" মানে "প্রস্তাবনা নয়" নিষিদ্ধ নয় যার অর্থ কিছু ক্ষেত্রে গ্রহণযোগ্য হতে পারে। PSR ডক -> ietf.org/rfc/rfc2119.txt
আহমেদ হামদি

14

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

এবং আমি এখনও আছি, তবে, এটি একটি ভাল অনুশীলন হতে পারে তার একটি কারণ আমি পেয়েছি। ভাবুন যে আপনার সার্বজনীন পদ্ধতি রয়েছে addFoo()এবং সেই পদ্ধতির অভ্যন্তরে আপনার কাজের কিছু অংশ রয়েছে যা অন্যান্য পদ্ধতির সাথে সাধারণ addFooWhenBar(), addFooWhenBaz()... এখন, সেই সাধারণ পদ্ধতির সেরা নাম হবে addFoo(), তবে এটি ইতিমধ্যে নেওয়া হয়েছে, সুতরাং আপনাকে অবশ্যই কিছুটা নিয়ে আসতে হবে কুরুচিপূর্ণ নাম addFooInternal()বা addFooCommon()বা ... তবে _addFoo()ব্যক্তিগত পদ্ধতিটি দেখতে সেরার মতো লাগে।


হ্যাঁ, রাজি। আন্ডারস্কোর সম্পর্কে অন্যেরা কী ভাবেন সে বিষয়ে আমি আসলে এখানে এসেছি কারণ আমি কেবল এগুলি খুব কম ব্যবহার করেছি এবং এটি সর্বদা ভুল মনে হয়, তবে এই উদাহরণটি আমার এক সময় time আমি এগুলি টেম্পলেট পদ্ধতি প্যাটার্নের কিছু ক্ষেত্রে ব্যবহার করেছি যেখানে একটি সরকারী পদ্ধতি শিশুদের ওভাররাইড করা বিমূর্ত সুরক্ষিত পদ্ধতিগুলিতে আহ্বান জানায়, এটি একই ধারণা। কখনও কখনও একটি সরকারী পদ্ধতি এবং একটি বিমূর্ত সুরক্ষিত পদ্ধতি যা এটি কল করে তাই অনুরূপ বা সম্পর্কিত যে তাদের নামকরণকে অন্যভাবে নাম দেওয়া ঠিক বিমূর্তের সাথে একটি _ এর উপসর্গের চেয়ে অদ্ভুত বলে মনে হয়।
জন প্যানকোয়াস্ট

12

শীর্ষস্থানীয় আন্ডারস্কোরগুলি সাধারণত ব্যক্তিগত সম্পত্তি এবং পদ্ধতিগুলির জন্য ব্যবহৃত হয় । এমন কোনও কৌশল নয় যা আমি সাধারণত নিযুক্ত করি তবে কিছু প্রোগ্রামারদের মধ্যে এটি জনপ্রিয় থাকে।


10

আমি ব্যক্তিগত পদ্ধতিগুলির জন্য লিখি পিএইচপি 5 শ্রেণিতে একটি শীর্ষস্থানীয় আন্ডারস্কোর ব্যবহার করি। এটি বিকাশকারীর কাছে একটি ছোট ভিজ্যুয়াল কিউ যা কোনও নির্দিষ্ট শ্রেণীর সদস্য ব্যক্তিগত। আইডিই ব্যবহার করার সময় এই জাতীয় ইঙ্গিতটি তেমন কার্যকর নয় যা আপনার জন্য পাবলিক এবং ব্যক্তিগত সদস্যদের আলাদা করে ishes আমি এটি আমার সি # দিন থেকে তুলেছি। পুরানো অভ্যাস ...


5

আমি বিশ্বাস করি যে আপনার আসল অনুমানটি সঠিক ছিল, আমি কিছু ভাষার পক্ষে পদ্ধতি বা সদস্য ইত্যাদির আন্ডারস্কোর উপসর্গ করা সাধারণ বিষয় বলে মনে করেছি যা "অবজেক্ট" -এর কাছে গোপন রাখা। বলার জন্য কেবল একটি দর্শনীয় উপায়, আপনি এটি কল করা উচিত নয়!


5

আমি একই উত্তরটির সন্ধান করছিলাম, আমি কিছু গবেষণা করেছি এবং আমি সন্ধান করেছি যে পিএইচপি ফ্রেমওয়ার্কগুলি বিভিন্ন স্টাইলের পরামর্শ দেয়:

কোড ইগনিটার

অফিসিয়াল ম্যানুয়ালটিতে একটি কোডিং স্টাইল বিভাগ রয়েছে যা এই অনুশীলনকে উত্সাহ দেয় :

ব্যক্তিগত পদ্ধতি এবং চলক

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

public function convert_text()

private function _convert_text()

অন্যান্য ফ্রেমওয়ার্কগুলি একই কাজ করে

Cakephp:

একই কাজ :

সদস্য দৃশ্যমানতা

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

class A
{
    protected $_iAmAProtectedVariable;

    protected function _iAmAProtectedMethod()
    {
       /* ... */
    }

    private $_iAmAPrivateVariable;

    private function _iAmAPrivateMethod()
    {
        /* ... */
    }
}

এবং যদিও

PEAR

একই কাজ :

প্রাইভেট ক্লাসের সদস্যদের আগে একক আন্ডারস্কোর দেওয়া হয়। উদাহরণ স্বরূপ:

$_status    _sort()     _initTree()

যদিও

Drupal এর

কোড শৈলী বিশেষত এর বিরুদ্ধে সতর্ক করে :

  1. সুরক্ষিত বা ব্যক্তিগত সম্পত্তি এবং পদ্ধতিগুলির একটি আন্ডারস্কোর উপসর্গ ব্যবহার করা উচিত নয়।

মিল

অন্যদিকে, ঘোষণা :

সাইমফনি পিএসআর -0, পিএসআর -1, পিএসআর -2 এবং পিএসআর -4 নথিগুলিতে সংজ্ঞায়িত মানগুলি অনুসরণ করে।


খুব পুঙ্খানুপুঙ্খ উত্তর।
কর্নেলিক্লিক

4

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

যদিও অজগরটিতে এটি ব্যবহারের কনভেনশন এখনও আছে তা আমি জানি না


3

ড্রুপালে (একটি পিএইচপি সিএমএস) আন্ডারস্কোরগুলি হুকগুলি ডাকা থেকে রোধ করতে ব্যবহৃত হতে পারে ( https://api.drupal.org/api/drupal/includes!module.inc/group/hooks/7 )।

যদি আমার কাছে "মাই_মডিউল" নামে একটি মডিউল থাকে এবং কোনও ফাংশনের নাম রাখতে চাই আমার_মডিউল_ইনসার্টটি হুক_ইনর্ট ফাংশনে "হুক" হবে would এটি রোধ করতে আমি আমার ফাংশনটির নাম _ মাই_মডিউল_ইনসেটে রাখতে পারি।

D দ্রুপালে হুকগুলি যেভাবে কাজ করে তা ভুল করে একটি হুক প্রয়োগ করা সম্ভব, যা খুব খারাপ।


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

3

ড্রুপাল, এবং আন্ডারস্কোর ব্যবহার:

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

function mymodule_tool($sting="page title"){
    $out ='';
    //do stuff 
    $out  .= _mymodule_tool_decor($sting);
    return $out;
}

function _mymodule_tool_decor($sting){
    return '<h1>'.$string.'</h1>';
}

অবশ্যই, একটি সহজ উদাহরণ ...


0

ক্লাসের বাইরে আমরা 'ভেরিয়েবলটি সংশোধন করব না' / 'ফাংশনটি কল করব' না কেন কেবল সেই উদ্দেশ্যে মনে রাখার জন্য আন্ডারস্কোর ব্যবহার করা।

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


"কনস্টেন্ট ভেরিয়েবল" বলতে কী বোঝ? আপনি একটি পরিবর্তনশীল যে ধ্রুবক সংজ্ঞায়িত করতে পারেন?
নিকো হাজে

-21

তাদের বলা হয় "ম্যাজিক পদ্ধতি"


39
_foo()একটি একক নেতৃস্থানীয় আন্ডারস্কোর সহ কোনও যাদু পদ্ধতি নয়। ম্যাজিক পদ্ধতিগুলি টানা দুটি শীর্ষস্থানীয় আন্ডারস্কোর দ্বারা চিহ্নিত করা হয় । এখানে প্রশ্নটি কেবল একটি সম্পর্কে আলোচনা করে।
BoltClock
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.