কিভাবে আমি একটি ফাংশন কলে inচ্ছিক যুক্তিগুলি এড়িয়ে যাব?


96

ঠিক আছে আমি কীভাবে পিএইচপি-তে যুক্তিগুলি এড়িয়ে যাব তা সম্পূর্ণরূপে ভুলে গিয়েছিলাম।

বলি আমার কাছে আছে:

function getData($name, $limit = '50', $page = '1') {
    ...
}

আমি এই ফাংশনটিকে কীভাবে বলব যাতে মাঝের প্যারামিটারটি ডিফল্ট মান (যেমন '50') নেয়?

getData('some name', '', '23');

উপরেরটি কি সঠিক হবে? আমি এটি কাজ করতে পারে বলে মনে হচ্ছে না।


4
@ চক আপনি ঠিক কি জন্য খুঁজছেন? এটি বাস্তবায়নের জন্য কোনও শ্রেনীর মতো বা শ্রেণীর মতো বা ...?
Rizier123

@ রিজিয়ার 123 আমি পিএইচপি-র বর্তমান সংস্করণটি এড়ানো যুক্তিগুলিকে সমর্থন করে কিনা (অন্যান্য ভাষাগুলির মতো) সমর্থন করে কিনা তা জিজ্ঞাসা করছি। বর্তমান উত্তরগুলি পুরানো হতে পারে। অনুগ্রহের বিবরণ থেকে: "বর্তমান উত্তরগুলি পাঁচ বছরের পুরনো PH পিএইচপি-র বর্তমান সংস্করণে কি জিনিসগুলি পরিবর্তন হয়?"
চক লে বাট

4
@ চক তাহলে উত্তর সম্ভবত হবে: কিছুই পরিবর্তন হয়নি; কার্যবিধি / কোড ব্যতীত আপনি আপনার কার্যকারিতা পাবেন না।
Rizier123

এখানে সমস্ত উত্তর মনে হচ্ছে ধরে নেওয়া হচ্ছে যে ফাংশন বলা হচ্ছে তার উপর আপনার নিয়ন্ত্রণ রয়েছে control যদি সেই ফাংশনটি কোনও লাইব্রেরি বা কাঠামোর অংশ হয় তবে আপনার পক্ষে যুক্তি প্রয়োজন হলে আর্গুমেন্ট 2 এর জন্য কিছু নির্দিষ্ট করা ছাড়া আপনার কোনও বিকল্প নেই 3. ফাংশনের জন্য উত্সটি অনুসন্ধান করা এবং ডিফল্ট মানটি প্রতিলিপি করা একমাত্র বিকল্প।
স্নেপি

এটি এড়ানো সম্ভব নয় তবে আপনি ডিফল্ট যুক্তি ব্যবহার করে পাস করতে পারেন ReflectionFunction। আমি একই উত্তর একটি উত্তর পোস্ট ।
ডেভিড

উত্তর:


56

আপনার পোস্টটি সঠিক।

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


4
আপনি একটি উদাহরণ প্রদান করতে পারেন?
আমি আমার

4
@iamme না $limit = is_numeric($limit) ? $limit : '50';শুরুতে getData ফাংশন
Kamafeather

41

falseবা এর মতো একটি ডিফল্ট নির্দিষ্ট করা ছাড়া আর কোনও যুক্তি "এড়িয়ে" যেতে পারে না null

যেহেতু পিএইচপি এটিতে কিছু সিনট্যাকটিক চিনির অভাব হয়, আপনি প্রায়শই এরকম কিছু দেখতে পাবেন:

checkbox_field(array(
    'name' => 'some name',
    ....
));

যা মন্তব্যগুলিতে স্পষ্টতই বলেছে, নামযুক্ত যুক্তি অনুকরণ করতে অ্যারে ব্যবহার করছে।

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


4
এফডাব্লুআইডাব্লু, আমি 'এর মতো কিছু'কে' নামের যুক্তি অনুকরণ করতে অ্যারে ব্যবহার করে 'চিহ্নিত করব। :)
বিশৃঙ্খলা

4
আরও নমনীয় হওয়া সত্ত্বেও আপনাকে যে প্যারামিটারগুলি সেট করা উচিত / তা স্থির করতে হবে (সেগুলি স্বাক্ষরে নেই) remember সুতরাং শেষ পর্যন্ত এটি যেমনটি মনে হচ্ছে তেমন দরকারী নাও হতে পারে তবে অবশ্যই এটি প্রসঙ্গে নির্ভর করে।
ফেলিক্স ক্লিং

তাহলে এই জাতীয় দৃশ্যের জন্য সর্বোত্তম অনুশীলনগুলি কী হবে?
অ্যাডাম গ্রান্ট

39

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

এর জন্য একটি অফিসিয়াল প্রস্তাব ছিল: https://wiki.php.net/rfc/skipparams , যা প্রত্যাখ্যান হয়েছিল। প্রস্তাবনা পৃষ্ঠায় এই বিষয়টিতে অন্যান্য এসও প্রশ্নের লিঙ্ক।


তারপরে পিএইচপি ফাংশনগুলিতে কীভাবে আরও কম / কম পরামিতিগুলির বিকল্প থাকতে পারে?
আমি আমার

4
পিএইচপি ডিফল্ট প্যারামিটার মানগুলির জন্য সমর্থন করে has তবে সেই পরামিতিগুলি অবশ্যই তালিকাটির শেষে থাকতে হবে।
ক্রিশ্চিক


4
ঝাঁকুনি আমাকে এত পাগল করে তোলে অন্য কারও জন্য অনুরোধ করা বৈশিষ্ট্যটি যদি আপনি পছন্দ করেন না তবে কেবল এটি ব্যবহার করবেন না। ইন্টারনেট কখনও কখনও খারাপ হয়।
লি

@ লাইস্যাক্সন ইস্যুটি পঠনযোগ্যতা এবং বহনযোগ্যতা। 1) যদি কেউ প্যারামিটারগুলি এড়িয়ে যাওয়ার সিদ্ধান্ত নেয় এবং কেউ ডিবাগিং কোডটি এই সত্যটি মিস করে তবে দুর্দান্ত বিভ্রান্তি দেখা দেয়। 2) নতুন কোডটি পুরানো সংস্করণগুলিতে কোনও বড় ছাড়াই ছাড়াই কাজ করতে পারে না এবং ভুল হওয়ার সম্ভাবনা খুব বেশি থাকে।
মার্ক ওয়ালশ

6

Syntচ্ছিক আর্গুমেন্টগুলি এড়িয়ে যেতে সক্ষম হওয়ার বিষয়ে কিছুই পরিবর্তন হয়নি, তবে সঠিক বাক্য গঠন এবং আমি যে আর্গুমেন্টগুলি এড়িয়ে যেতে চাইছি তার জন্য NULL নির্দিষ্ট করতে সক্ষম হতে হবে, আমি এখানে এটি কীভাবে করব:

define('DEFAULT_DATA_LIMIT', '50');
define('DEFAULT_DATA_PAGE', '1');

/**
 * getData
 * get a page of data 
 *
 * Parameters:
 *     name - (required) the name of data to obtain
 *     limit - (optional) send NULL to get the default limit: 50
 *     page - (optional) send NULL to get the default page: 1
 * Returns:
 *     a page of data as an array
 */

function getData($name, $limit = NULL, $page = NULL) {
    $limit = ($limit===NULL) ? DEFAULT_DATA_LIMIT : $limit;
    $page = ($page===NULL) ? DEFAULT_DATA_PAGE : $page;
    ...
}

এটিকে এভাবে বলা যেতে পারে: getData('some name',NULL,'23');এবং ভবিষ্যতে যে কেউ এই ফাংশনটি কল করে তাদের প্রত্যেকবার খেলাপি বা তাদের জন্য ঘোষিত ধ্রুবকের কথা মনে রাখা উচিত নয়।


4
আপনি সম্ভবত কঠোর তুলনা চাইবেন ($ সীমা === নাল)
রোলেওর

4

এর সহজ উত্তরটি হ'ল না । কিন্তু যখন আর্গুমেন্টগুলি এটিকে পুনরায় সাজানোর সময় এড়িয়ে যায়?

ইতিমধ্যে একটি " ডিফল্ট ফাংশন আর্গুমেন্টের ভুল ব্যবহার " এবং আপনি যেমনটি আশা করেন তেমন কাজ করবে না।

পিএইচপি ডকুমেন্টেশন থেকে একটি পাশ নোট:

ডিফল্ট আর্গুমেন্ট ব্যবহার করার সময়, কোনও ডিফল্ট কোনও অ-ডিফল্ট আর্গুমেন্টের ডানদিকে থাকা উচিত; অন্যথায়, জিনিসগুলি প্রত্যাশার মতো কাজ করবে না।

নিম্নোক্ত বিবেচনা কর:

function getData($name, $limit = '50', $page = '1') {
    return "Select * FROM books WHERE name = $name AND page = $page limit $limit";
}

echo getData('some name', '', '23');   // won't work as expected

আউটপুটটি হবে:

"Select * FROM books WHERE name = some name AND page = 23 limit"

ডিফল্ট ফাংশন আর্গুমেন্টগুলির সঠিক ব্যবহার এই জাতীয় হওয়া উচিত:

function getData($name, $page = '1', $limit = '50') {
    return "Select * FROM books WHERE name = $name AND page = $page limit $limit";
}

echo getData('some name', '23');  // works as expected

আউটপুটটি হবে:

"Select * FROM books WHERE name = some name AND page = 23 limit 50"

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

সম্পাদনা: এটিকে nullঅন্যের পরামর্শ হিসাবে সেট করা কার্যকর হতে পারে এবং এটি অন্য বিকল্প হতে পারে তবে আপনি যা চান স্যুট নাও করতে পারে। এটি সংজ্ঞায়িত না হলে ডিফল্টটিকে সর্বদা নালায় সেট করে দেবে।


এটি সর্বোত্তম উত্তর যেহেতু এটি পরিষ্কারভাবে চিত্রিত সিন্টেক্সটিকাল ব্যাখ্যা সরবরাহ করে! ধন্যবাদ!
খ্রিস্টান

2

যে কোনও প্যারামিটার বাদ পড়েছে (আপনাকে অবশ্যই) ডিফল্ট প্যারামিটারের সাথে যেতে হবে, নিরাপদ দিকে থাকতে।

(ডিফল্ট প্যারামিটার '' বা অনুরূপ বা বিপরীতে যেখানে নাল রয়েছে তার জন্য স্থিরতা আপনাকে সমস্যার মধ্যে ফেলবে ...)


2

উপরে উল্লিখিত হিসাবে, আপনি পরামিতিগুলি এড়াতে সক্ষম হবেন না। আমি কিছু উত্তর সরবরাহ করার জন্য এই উত্তরটি লিখেছি, যা একটি মন্তব্যে রাখার পক্ষে খুব বড় ছিল।

@ ফ্র্যাঙ্ক নোক ফাংশনটিকে তার ডিফল্ট পরামিতিগুলির সাথে কল করার প্রস্তাব দেয়, যেমন উদাহরণস্বরূপ

function a($b=0, $c=NULL, $d=''){ //...

আপনার ব্যবহার করা উচিত

$var = a(0, NULL, 'ddd'); 

যা কার্যত প্রথম দুটি ( $bএবং $c) পরামিতি বাদ দেওয়ার মতোই হবে ।

কোনটি ডিফল্ট (এটি 0ডিফল্ট মান সরবরাহ করতে টাইপ করা হয়, বা এটি গুরুত্বপূর্ণ?) এটি পরিষ্কার নয় ।

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

কিছু বৈকল্পিক কিছু গ্লোবাল ধ্রুবককে সংজ্ঞায়িত করতে পারে, যেমন DEFAULT_A_B"ফাংশন এ এর ​​বি প্যারামিটারের ডিফল্ট মান" এবং "বাদ দেওয়া" পরামিতিটি এভাবে হবে:

$var = a(DEFAULT_A_B, DEFAULT_A_C, 'ddd');

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

class MyObjectClass {
  const DEFAULT_A_B = 0;

  function a($b = self::DEFAULT_A_B){
    // method body
  }
} 
$obj = new MyObjectClass();
$var = $obj->a(MyObjectClass::DEFAULT_A_B); //etc.

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

এই সমাধান স্বচ্ছতার কাঁচা ডিফল্ট মান (যেমন সরবরাহের চেয়ে ভাল অবশ্যই হয় NULL, 0ইত্যাদি) যা পাঠক কিছুই বলছে না।

(আমি সম্মতি জানাই যে পছন্দ করা পছন্দ $var = a(,,'ddd');করা সর্বোত্তম বিকল্প হবে)


2

আপনি আর্গুমেন্টগুলি এড়িয়ে যেতে পারবেন না তবে আপনি অ্যারে প্যারামিটারগুলি ব্যবহার করতে পারেন এবং আপনাকে কেবলমাত্র 1 টি প্যারামিটার নির্দিষ্ট করতে হবে যা প্যারামিটারের অ্যারে।

function myfunction($array_param)
{
    echo $array_param['name'];
    echo $array_param['age'];
    .............
}

এবং আপনি যতগুলি প্যারামিটার প্রয়োজন সেগুলি যোগ করতে পারেন, আপনাকে সেগুলি সংজ্ঞায়িত করার দরকার নেই। আপনি যখন ফাংশনটি কল করেন, আপনি আপনার প্যারামিটারগুলি এভাবে রাখবেন:

myfunction(array("name" => "Bob","age" => "18", .........));

0

ঠিক যেমন সবাই ইতিমধ্যে বলেছে যে আপনি যা চান তা ফাংশনে কোনও কোড লাইন যোগ না করে পিএইচপি সম্ভব হবে না।

তবে আপনার কার্যকারিতা পেতে আপনি এই টুকরো কোডটি কোনও ফাংশনের শীর্ষে রাখতে পারেন:

foreach((new ReflectionFunction(debug_backtrace()[0]["function"]))->getParameters() as $param) {
    if(empty(${$param->getName()}) && $param->isOptional())
        ${$param->getName()} = $param->getDefaultValue();
}

সুতরাং মূলত debug_backtrace()আমি ফাংশনের নামটি পেয়েছি যেখানে এই কোডটি স্থাপন করা হয়েছে, তারপরে একটি নতুন ReflectionFunctionঅবজেক্ট তৈরি করতে এবং সমস্ত ফাংশন আর্গুমেন্টের পরে লুপ করুন।

লুপে আমি কেবল ফাংশন আর্গুমেন্ট কিনা empty()এবং আর্গুমেন্টটি "optionচ্ছিক" কিনা (যার অর্থ এটির একটি ডিফল্ট মান আছে) তা খতিয়ে দেখি। যদি হ্যাঁ আমি কেবল যুক্তিটির জন্য ডিফল্ট মান নির্ধারণ করি।

Demo


0

নালার সীমাটি সেট করুন

function getData($name, $limit = null, $page = '1') {
    ...
}

এবং যে ফাংশন কল

getData('some name', null, '23');

আপনি যদি সীমাটি সেট করতে চান তবে আপনি একটি আর্গুমেন্ট হিসাবে পাস করতে পারেন

getData('some name', 50, '23');

0

আগে যেমন পরামর্শ দেওয়া হয়েছিল , কিছুই পরিবর্তন হয়নি। সাবধান, যদিও, অনেকগুলি পরামিতি (বিশেষত alচ্ছিক) কোড গন্ধের একটি শক্তিশালী সূচক।

সম্ভবত আপনার ফাংশনটি খুব বেশি করছে:

// first build context
$dataFetcher->setPage(1);
// $dataFetcher->setPageSize(50); // not used here
// then do the job
$dataFetcher->getData('some name');

কিছু পরামিতি যৌক্তিকভাবে গ্রুপ করা যেতে পারে:

$pagination = new Pagination(1 /*, 50*/);
getData('some name', $pagination);
// Java coders will probably be familiar with this form:
getData('some name', new Pagination(1));

শেষ অবলম্বনে, আপনি সর্বদা একটি অ্যাডহক প্যারামিটার অবজেক্টটি চালু করতে পারেন :

$param = new GetDataParameter();
$param->setPage(1);
// $param->setPageSize(50); // not used here
getData($param);

(এটি কম ফর্মাল প্যারামিটার অ্যারে প্রযুক্তির কেবল একটি গৌরবময় সংস্করণ )

কখনও কখনও, পরামিতি optionচ্ছিক করার খুব কারণটি ভুল। এই উদাহরণস্বরূপ, $pageসত্যই optionচ্ছিক বলতে বোঝানো হয়েছে? কয়েকটা চরিত্র সংরক্ষণ করা কি আসলেই কোনও পার্থক্য করে?

// dubious
// it is not obvious at first sight that a parameterless call to "getData()"
// returns only one page of data
function getData($page = 1);

// this makes more sense
function log($message, $timestamp = null /* current time by default */);

0

এই স্নিপেট:

    ফাংশন getData ($ নাম, $ বিকল্প) {
       $ ডিফল্ট = অ্যারে (
            'সীমা' => 50,
            'পৃষ্ঠা' => 2,
        );
        gs আরোগুলি = অ্যারে_মিটার ($ ডিফল্ট, $ বিকল্পগুলি);
        মুদ্রণ_আর (gs আরগস);
    }

    getData ('foo', অ্যারে ());
    getData ('foo', অ্যারে ('সীমা' => 2));
    getData ('foo', অ্যারে ('সীমা' => 10, 'পৃষ্ঠা' => 10));

উত্তরটি হ'ল:

     অ্যারে
    (
        [সীমা] => 50
        [পৃষ্ঠা] => ২
    )
    অ্যারে
    (
        [সীমা] => 2
        [পৃষ্ঠা] => ২
    )
    অ্যারে
    (
        [সীমা] => 10
        [পৃষ্ঠা] => 10
    )


4
ভাল লাগল তবে সামান্য ব্যাখ্যা সহায়ক হবে।
শোদেব

উত্তম উত্তর, তবে আপনি যদি alচ্ছিক প্যারামিটারটি বাদ দিতে চান তবে এটি করুন: ফাংশন getData ($ নাম, $ আরগস = অ্যারে ()) $ a ডিফল্ট = অ্যারে ('সীমা': => 50, 'পৃষ্ঠা' => 2) ; gs আরগস = অ্যারে_মিটার (a ডিফল্ট, $ আরগস); } এখন এই ফাংশনটিকে কেবলমাত্র প্রথম প্যারামিটার দিয়ে কল করা সম্ভব: getData ('foo');
ইকোসিন

0

এটি আমি করতাম:

<?php

    function getData($name, $limit = '', $page = '1') {
            $limit = (EMPTY($limit)) ? 50 : $limit;
            $output = "name=$name&limit=$limit&page=$page";
            return $output;
    }

     echo getData('table');

    /* output name=table&limit=50&page=1 */

     echo getData('table',20);

    /* name=table&limit=20&page=1 */

    echo getData('table','',5);

    /* output name=table&limit=50&page=5 */

    function getData2($name, $limit = NULL, $page = '1') {
            $limit = (ISSET($limit)) ? $limit : 50;
            $output = "name=$name&limit=$limit&page=$page";
            return $output;
    }

    echo getData2('table');

    // /* output name=table&limit=50&page=1 */

    echo getData2('table',20);

    /* output name=table&limit=20&page=1 */

    echo getData2('table',NULL,3);

    /* output name=table&limit=50&page=3 */

?>

আশা করি এটি কারও সাহায্য করবে


0

এটি বেশ কয়েকটি প্রযুক্তিগতভাবে সক্ষম উত্তর সহ একটি পুরানো প্রশ্ন, তবে এটি পিএইচপি: অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিংয়ে আধুনিক ডিজাইনের ধরণগুলির মধ্যে একটির জন্য চিৎকার করে। আদিম স্কেলার ডাটা প্রকারের সংগ্রহের পরিবর্তে ইনজেকশনের পরিবর্তে "ইনজেকশন-অবজেক্ট" ব্যবহার করে বিবেচনা করুন যাতে ফাংশনটির জন্য প্রয়োজনীয় সমস্ত ডেটা থাকে। http://php.net/manual/en/language.tyype.intro.php

ইনজেকশন-অবজেক্টটিতে সম্পত্তি বৈধকরণের রুটিন ইত্যাদি থাকতে পারে If সম্ভাব্য অসম্পূর্ণ ডেটা সহ।

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

https://www.experts-exchange.com/articles/18409/Using-Name-Paraters-in-PHP-Function-Calls.html


0

Optionচ্ছিক পরামিতিগুলির সাথে আমাকে একটি কারখানা তৈরি করতে হয়েছিল, আমার কাজটি হল নাল কোয়েলসিং অপারেটরটি ব্যবহার করা:

public static function make(
    string $first_name = null,
    string $last_name = null,
    string $email = null,
    string $subject = null,
    string $message = null
) {
    $first_name = $first_name ?? 'First';
    $last_name  = $last_name ?? 'Last';
    $email      = $email ?? 'foo@bar.com';
    $subject    = $subject ?? 'Some subject';
    $message    = $message ?? 'Some message';
}

ব্যবহার:

$factory1 = Factory::make('First Name Override');
$factory2 = Factory::make(null, 'Last Name Override');
$factory3 = Factory::make(null, null, null, null 'Message Override');

সবচেয়ে সুন্দর জিনিস নয়, তবে পরীক্ষাগুলির জন্য কারখানায় ব্যবহার করা ভাল প্যাটার্ন হতে পারে।



-1

আপনি আপনার ফাংশন কলে মাঝারি প্যারামিটারটি এড়িয়ে যেতে পারবেন না। তবে, আপনি এটি দিয়ে কাজ করতে পারেন:

function_call('1', '2', '3'); // Pass with parameter.
function_call('1', null, '3'); // Pass without parameter.

ফাংশন:

function function_call($a, $b='50', $c){
    if(isset($b)){
        echo $b;
    }
    else{
        echo '50';
    }
}

আমি নিশ্চিত না কেন আপনার ভোট কেন নিচে নেমেছে, $ সি ব্যতীত অন্য একটি ডিফল্ট মানও প্রয়োজন (youচ্ছিক যুক্তির পরে আপনার কোনও প্রয়োজনীয় যুক্তি থাকতে পারে না)।
ফ্রাঙ্ক ফোর্ট

-2

যেমনটি ইব্রাহিমলাওয়াল উল্লেখ করেছেন। কেবলমাত্র nullমানগুলিতে সেট করা এটি সর্বোত্তম অনুশীলন । পাস করা মানটি nullযেখানে আপনি আপনার সংজ্ঞায়িত ডিফল্ট ব্যবহার করেন তা পরীক্ষা করে দেখুন ।

<?php
define('DEFAULT_LIMIT', 50);
define('DEFAULT_PAGE', 1);

function getData($name, $limit = null, $page = null) {
    $limit = is_null($limit) ? DEFAULT_LIMIT : $limit;
    $page = is_null($page) ? DEFAULT_PAGE : $page;
    ...
}
?>

আশাকরি এটা সাহায্য করবে.


আপনি কেবল প্রতিক্রিয়াটি সদৃশ করেছেন। বরং আপনি এটি উপরে uptated বা মন্তব্য করতে পারে।
ইব্রাহিম লয়াল

-6
getData('some name');

কেবল তাদের পাস করবেন না এবং ডিফল্ট মান গ্রহণ করা হবে

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