w3schools - php wiki




ফাংশন থেকে একাধিক আয় (20)

2 ভেরিয়েবল ফিরে কোন উপায় নেই। যদিও, আপনি একটি অ্যারে প্রচার এবং এটি ফেরত দিতে পারেন; একটি গতিশীল পরিবর্তনশীল, ইত্যাদি ফিরে একটি শর্তাধীন তৈরি করুন।

উদাহরণস্বরূপ, এই ফাংশন $var2 ফিরে হবে

function wtf($blahblah = true) {
    $var1 = "ONe";
    $var2 = "tWo";

    if($blahblah === true) {
      return $var2;
    }
    return $var1;
}

অ্যাপ্লিকেশন:

echo wtf();
//would echo: tWo
echo wtf("not true, this is false");
//would echo: ONe

আপনি তাদের উভয় চেয়েছিলেন, আপনি ফাংশন একটু বিট পরিবর্তন করতে পারে

function wtf($blahblah = true) {
    $var1 = "ONe";
    $var2 = "tWo";

    if($blahblah === true) {
      return $var2;
    }

    if($blahblah == "both") {
      return array($var1, $var2);
    }

    return $var1;
}

echo wtf("both")[0]
//would echo: ONe
echo wtf("both")[1]
//would echo: tWo

list($first, $second) = wtf("both")
// value of $first would be $var1, value of $second would be $var2

এরকম 2 টি আয় সহ কোনও ফাংশন থাকতে পারে:

function test($testvar)
{
  // do something

  return $var1;
  return $var2;
}

যদি তাই হয়, আমি কিভাবে প্রতিটি ফেরত আলাদাভাবে পেতে সক্ষম হবে?


অথবা আপনি রেফারেন্স দ্বারা পাস করতে পারেন:

function byRef($x, &$a, &$b)
{
    $a = 10 * $x;
    $b = 100 * $x;
}

$a = 0;
$b = 0;

byRef(10, $a, $b);

echo $a . "\n";
echo $b;

এই আউটপুট হবে

100
1000

আপনি একটি ফাংশন থেকে একাধিক অ্যারে এবং scalars ফিরে আসতে পারেন

function x()
{
    $a=array("a","b","c");
    $b=array("e","f");
    return array('x',$a,$b);
}

list ($m,$n,$o)=x();

echo $m."\n";
print_r($n);
print_r($o);

আপনি রেফারেন্স দ্বারা সেট করে দুটি বা তার বেশি ভেরিয়েবলের মান পেতে পারেন

function t(&$a, &$b) {
    $a = 1;
    $b = 2;
}


t($a,$b);

echo $a . '  ' . $b;

আউটপুট:

1 2

আমি Eliego পরিষ্কারভাবে উত্তর ব্যাখ্যা করেছে। কিন্তু আপনি উভয় মান ফেরত দিতে চান, তাদের একটি অ্যারে মধ্যে রাখুন এবং এটি ফেরত।

function test($testvar)
{
  // do something

  return array('var1'=>$var1,'var2'=>$var2);
//defining a key would be better some times   
}

// ফিরে মান প্রবেশাধিকার

$returned_values = test($testvar);

echo $returned_values['var1'];
echo $returned_values['var2'];

আমি একটি অনুরূপ সমস্যা ছিল - তাই আমি প্রায় চেষ্টা করেছি এবং একটি বিট googled (এই থ্রেড ফাইন্ডিং)। 5 মিনিটের চেষ্টা এবং ত্রুটির পরে আমি জানতে পেরেছি যে আপনি কেবলমাত্র "AND" ব্যবহার করতে পারেন আবার ফিরে যাওয়ার এক লাইনের মধ্যে দুটি (সম্ভবত আরো - এখনও পরীক্ষিত হয়নি) ফেরত দিতে পারেন।

আমার কোড:

  function get_id(){
    global $b_id, $f_id;
    // stuff happens
    return $b_id AND $f_id;
  }
  //later in the code:
  get_id();
  var_dump($b_id);
  var_dump($f_id); // tested output by var_dump

এটা কাজ করে। আমি উভয় মান পেতে আমি প্রত্যাশিত / পেতে হবে। আমি আশা করি আমি এই থ্রেড পড়তে সাহায্য করতে পারে :)


উত্তর নেই। যখন পার্সার প্রথম রিটার্ন বিবৃতিতে পৌছায়, তখন এটি কলিং ফাংশনে ফিরে আসে - আপনার দ্বিতীয় প্রত্যাবর্তন বিবৃতি কখনোই কার্যকর হবে না।


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

`
<?php
function small_numbers()
{
    return array (0, 1, 2);
}
list ($zero, $one, $two) = small_numbers();
?>
`

এই কোডটি প্রকৃতপক্ষে পিএইচপি এর ওয়েবসাইটে নিম্নলিখিত পৃষ্ঠা থেকে অনুলিপি করা হয়েছে: http://php.net/manual/en/functions.returning-values.php আমি নিজেও একই ধরণের কোড ব্যবহার করেছি, তাই এটি নিশ্চিত করতে পারি এটা ভাল এবং এটি কাজ করে।


একাধিক আয় করার অনুমতি দেয় এমন ভাষাগুলি সাধারণত একাধিক মানকে ডাটা কাঠামোর রূপান্তর করে।

উদাহরণস্বরূপ, পাইথনটিতে আপনি একাধিক মান ফেরত দিতে পারেন, তবে আসলেই এটি 1 টুপুল হিসাবে ফিরে আসছে।

সুতরাং আপনি একটি সহজ অ্যারে তৈরি করে এবং এটি ফেরত করে পিএইচপি একাধিক মান ফিরে করতে পারেন।


এটা সম্ভব না দুটি ফেরত বিবৃতি আছে। তবে এটি ত্রুটি নিক্ষেপ করে না কিন্তু ফাংশন বলা হয় যখন আপনি শুধুমাত্র প্রথম ফেরত বিবৃতি মান পাবেন। আমরা ফিরে একাধিক মান পেতে অ্যারের রিটার্ন ব্যবহার করতে পারেন। উদাহরণ স্বরূপ:

function test($testvar)
{
  // do something
  //just assigning a string for example, we can assign any operation result
  $var1 = "result1";
  $var2 = "result2";
  return array('value1' => $var1, 'value2' => $var2);
}

কিছু বস্তু হিসাবে একাধিক মান ফেরত পছন্দ হতে পারে:

function test() {
    $object = new stdClass();

    $object->x = 'value 1';
    $object->y = 'value 2';

    return $object;
}

এবং এটি এই মত কল:

echo test()->x;

বা:

$test = test();
echo $test->y;

গ্লোবাল ব্যবহার করুন:

<?php

function t($a) 
{
 global $add, $noadd;
 $add=$a+$a;
 $noadd=$a;
}

$a=1;
t($a);
echo $noadd." ".$add;
?>

এই 1 প্রতিধ্বনি হবে


টেকনিক্যালি, আপনি একাধিক মান ফিরে নাও করতে পারেন। যাইহোক, যে সীমাবদ্ধতার কাছাকাছি কাজ করার একাধিক উপায় আছে। একাধিক মান ফেরত মত সবচেয়ে কাজ করে যে উপায়, list শব্দ সঙ্গে হয়:

function getXYZ()
{
    return array(4,5,6);
}

list($x,$y,$z) = getXYZ();

// Afterwards: $x == 4 && $y == 5 && $z == 6
// (This will hold for all samples unless otherwise noted)

টেকনিক্যালি, আপনি একটি অ্যারে ফিরে আসছেন এবং প্রকৃত অ্যারে সঞ্চয় করার পরিবর্তে বিভিন্ন অ্যারের উপাদানগুলি সংরক্ষণ করতে list ব্যবহার করছেন। এই কৌশল ব্যবহার করে এটি একাধিক মান ফেরত মত অধিকাংশ মনে করতে হবে।

list সমাধান একটি পরিবর্তে পিএইচপি নির্দিষ্ট। অনুরূপ কাঠামোর সাথে কয়েকটি ভাষা রয়েছে, তবে আরো বেশি ভাষা যা নেই। আরেকটি উপায় যা সাধারণত একাধিক মান "ফিরতে" ব্যবহৃত হয় এবং এটি প্রায় প্রতিটি ভাষাতে উপলব্ধ (এক ভাবে বা অন্যদিকে)। যাইহোক, এই পদ্ধতি বেশ ভিন্ন চেহারা হবে তাই কিছু ব্যবহৃত হচ্ছে প্রয়োজন হতে পারে।

// note that I named the arguments $a, $b and $c to show that
// they don't need to be named $x, $y and $z
function getXYZ(&$a, &$b, &$c)
{
    $a = 4;
    $b = 5;
    $c = 6; 
}

getXYZ($x, $y, $z);

এই কৌশলটি পিএইচপি নিজেই সংজ্ঞায়িত কিছু str_replace ব্যবহৃত হয় (উদাহরণস্বরূপ str_replace $count , preg_match $matches )। এটি একাধিক মান ফেরত থেকে বেশ ভিন্ন মনে হতে পারে, কিন্তু অন্তত সম্পর্কে বুদ্ধিমান মূল্য।

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

class MyXYZ
{
    public $x;
    public $y;
    public $z;
}

function getXYZ()
{
    $out = new MyXYZ();

    $out->x = 4;
    $out->y = 5;
    $out->z = 6;

    return $out;
}

$xyz = getXYZ();

$x = $xyz->x;
$y = $xyz->y;
$z = $xyz->z;

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

প্রথমত, আমরা কেবল একটি অ্যারে ফেরত দিতে পারি এবং এটি একটি অ্যারের ব্যতীত অন্য কিছু হিসাবে আচরণ করতে পারি না:

function getXYZ()
{
    return array(1,2,3);
}

$array = getXYZ();

$x = $array[1];
$y = $array[2];
$z = $array[3];

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

অন্যথায়, এক একটি সহযোগী অ্যারে ব্যবহার করতে পারে:

function getXYZ()
{
    return array('x' => 4,
                 'y' => 5,
                 'z' => 6);
}

$array = getXYZ();

$x = $array['x'];
$y = $array['y'];
$z = $array['z'];

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

function getXYZ()
{
    $x = 4;
    $y = 5;
    $z = 6;

    return compact('x', 'y', 'z');
}

$array = getXYZ();

$x = $array['x'];
$y = $array['y'];
$z = $array['z'];

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

অবশেষে, আমি উল্লেখ করতে চাই যে list সহযোগী অ্যারের সাথে ভালভাবে খেলবে না। নিম্নলিখিত আপনি কি আশা করবেন না:

function getXYZ()
{
    return array('x' => 4,
                 'y' => 5,
                 'z' => 6);
}

$array = getXYZ();

list($x, $y, $z) = getXYZ();

তবে, নিম্নলিখিত কিছু ভিন্ন করবে:

function getXYZ()
{
    return array('x' => 4,
                 'z' => 6,
                 'y' => 5);
}

$array = getXYZ();

list($x, $y, $z) = getXYZ();

// Pay attention: $y == 6 && $z == 5

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


পিএইচপি 5.5 এ নতুন ধারণা রয়েছে: generators , যেখানে আপনি ফাংশন থেকে একাধিক মান উপনীত করতে পারেন:

function hasMultipleValues() {
    yield "value1";
    yield "value2";
}

$values = hasMultipleValues();
foreach ($values as $val) {
    // $val will first be "value1" then "value2"
}

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


ফাংশন, সংজ্ঞা দ্বারা, শুধুমাত্র একটি মান ফেরত।

যাইহোক, আপনি অনুমান হিসাবে, যে মান একটি অ্যারে হতে পারে।

সুতরাং আপনি অবশ্যই ভালো কিছু করতে পারেন:

<?PHP
function myfunc($a,$b){
   return array('foo'=>$a,'bar'=>$b);
}
print_r(myfunc('baz','bork'));

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


সর্বোত্তম অনুশীলন হল আপনার ফেরত ভেরিয়েবলগুলিকে অ্যারেতে রাখা এবং তারপরে ভেরিয়েবলগুলিতে অ্যারে মান নির্ধারণ করতে list() ব্যবহার করুন।

<?php

function add_subt($val1, $val2) {
    $add = $val1 + $val2;
    $subt = $val1 - $val2;

    return array($add, $subt);
}

list($add_result, $subt_result) = add_subt(20, 7);
echo "Add: " . $add_result . '<br />';
echo "Subtract: " . $subt_result . '<br />';

?>

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


আমি একাধিক রিটার্ন মান পিএইচপি ফাংশন জন্য এই মত বাস্তবায়ন করেছেন। আপনার কোড দিয়ে সুন্দর হতে। ধন্যবাদ.

 <?php
    function multi_retun($aa)
    {
        return array(1,3,$aa);
    }
    list($one,$two,$three)=multi_retun(55);
    echo $one;
    echo $two;
    echo $three;
    ?>

$var1 = 0;
$var2 = 0;

function test($testvar, &$var1 , &$var2)
{
  $var1 = 1;
  $var2 = 2;
  return;
}
test("", $var1, $var2);

// var1 = 1, var2 = 2 

এটি একটি ভাল উপায় নয় তবে আমি মনে করি আমরা একই সময়ে একটি ফাংশনে 2 ভেরিয়েবল সেট করতে পারি







php