এম্পারস্যান্ড দিয়ে পিএইচপি ফাংশন শুরু করার অর্থ কী?


129

আমি এই কোডটি সহ ফেসবুক লাইব্রেরিটি ব্যবহার করছি:

class FacebookRestClient {
...
    public function &users_hasAppPermission($ext_perm, $uid=null) {
        return $this->call_method('facebook.users.hasAppPermission', 
        array('ext_perm' => $ext_perm, 'uid' => $uid));
    }
...
}

ফাংশন সংজ্ঞাটির শুরুতে & এর অর্থ কী, এবং আমি এর মতো লাইব্রেরিটি কীভাবে ব্যবহার করব (সাধারণ উদাহরণে)

উত্তর:


157

কোনও ফাংশন নামের আগে একটি অ্যাম্পারস্যান্ড মানে ফাংশনটি মানটির পরিবর্তে কোনও চলকের রেফারেন্স দেয়।

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

রিটার্নিং রেফারেন্স দেখুন ।


1
সুতরাং, খুব বিশদে না গিয়ে, আপনি কল করতে (শ্রেণি তাত্ক্ষণিকভাবে) $ ফলাফলগুলি = $ ফেসবুক-> ব্যবহারকারী_হাস অ্যাপপ্রিমারেশন ($ প্যারাম 1, $ প্যারাম 2) এর মতো কিছু বলবেন; ? আমার ধারণা আমি এখানে উপদ্রব সম্পর্কে নিশ্চিত নই, যদিও সাহায্যের জন্য ধন্যবাদ।
অ্যালেক্স ম্যাক্প

2
হ্যাঁ - আমি ঠিক এটি কল করব।
ডমিনিক রজার

16

এটি ইতিমধ্যে উল্লিখিত হিসাবে একটি রেফারেন্স ফিরিয়ে দিচ্ছে। পিএইচপি 4 এ, অবজেক্টগুলি অন্য কোনও মানের মতোই মান অনুসারে নির্ধারিত হয়েছিল। এটি অত্যন্ত অপ্রচলিত এবং অন্যান্য ভাষা কীভাবে কাজ করে তার বিপরীতে।

সমস্যাটি পেতে, রেফারেন্সগুলি ভেরিয়েবলগুলির জন্য ব্যবহৃত হত যা বস্তুগুলিকে নির্দেশ করে। পিএইচপি 5 এ, উল্লেখগুলি খুব কম ব্যবহৃত হয় rarely আমি অনুমান করছি এটি পিএইচপি 4 এর সাথে পিছনে সামঞ্জস্য রক্ষার চেষ্টা করা লিগ্যাসি কোড বা কোড।


এটি অফিসিয়াল ফেসবুক পিএইচপি গ্রন্থাগার, এফডাব্লুআইডাব্লু।
অ্যালেক্স ম্যাক্প

4
@ অ্যালেক্স: সেক্ষেত্রে, তারা সম্ভবত এগুলি নিজের কাছ থেকে পিএইচপি 4 ব্যবহার করে এমন নৈমিত্তিক হ্যাকারদের রক্ষা করার জন্য করছেন। আপনার নিজের কোডে এটি করা উচিত নয় - এটি অবমূল্যায়িত।
ট্রয়লসकन

3
"এটি অত্যন্ত অনিচ্ছাকৃত এবং বেশিরভাগ অন্যান্য ভাষা কীভাবে কাজ করে তার বিপরীতে" আমি আরও দ্বিমত করতে পারি না।
অরবিটে 1-10

5
@WildlyInaccurate: ডিফল্ট হিসাবে রেফারেন্স দ্বারা অবজেক্টগুলি অর্পণ করা, যা NET এবং জাভাতে (আমার মনে হয়) ঘটে যা অত্যন্ত অনর্থক। অন্যান্য বেশিরভাগ ভাষায় অ্যাসাইনমেন্টটি অনুলিপি দ্বারা করা হয়, আপনার কোনও "অবজেক্ট" আছে কিনা বা আদিম বা যা কিছু আছে এবং যেহেতু সময়ের আগে থেকেই এটি ঘটেছে, বিশ্বকে এটাই আটকে থাকা উচিত।
অরবিটে হালকাতা রেস

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

4

এই প্রায়ই যেমন পিএইচপি পরিচিত রেফারেন্স রিটার্নিং বা রেফারেন্স দ্বারা রিটার্নিং

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

রিটার্নিং রেফারেন্সে পিএইচপি ডকুমেন্টেশন

পিএইচপি-তে একটি রেফারেন্স হল কেবল একটি ভেরিয়েবলের বিষয়বস্তুতে বরাদ্দ করা অন্য নাম। পিএইচপি রেফারেন্স সি প্রোগ্রামিংয়ের পয়েন্টারগুলির মতো নয় , এগুলি প্রকৃত মেমরি ঠিকানা নয়, সুতরাং সেগুলি পয়েন্টার গাণিতিকগুলির জন্য ব্যবহার করা যাবে না।

উল্লেখগুলি ফিরিয়ে দেওয়ার ধারণাটি খুব বিভ্রান্তিকর হতে পারে বিশেষত নতুনদের কাছে, সুতরাং একটি উদাহরণ সহায়ক হবে।

$populationCount = 120;

function &getPopulationCount() {
  global $populationCount;
  return $populationCount;
}

$countryPopulation =& getPopulationCount();
$countryPopulation++;
echo "\$populationCount = $populationCount\n"; // Output: $populationCount = 121 
echo "\$countryPopulation = $countryPopulation\n"; //Output: $countryPopulation = 121 

getPopulationCount()পূর্ববর্তী সঙ্গে সংজ্ঞায়িত ফাংশন &, এর বিষয়বস্তু বা মানটির রেফারেন্স দেয় $populationCount। সুতরাং, ইনক্রিমেন্টিং $countryPopulation, ইনক্রিমেন্টও $populationCount

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