চলক - পিএইচপি এর অর্থ কী?


103

আমি $thisপিএইচপি-তে সর্বদা পরিবর্তনশীল দেখি এবং এটি কী ব্যবহার করে তা আমার কোনও ধারণা নেই। আমি ব্যক্তিগতভাবে কখনও এটি ব্যবহার করি নি।

কেউ আমাকে বলতে পারবেন কীভাবে $thisপিএইচপিতে চলক কাজ করে?

উত্তর:


130

এটি বর্তমান অবজেক্টের একটি রেফারেন্স, এটি বেশিরভাগ ক্ষেত্রে অবজেক্ট অরিয়েন্টেড কোডে ব্যবহৃত হয়।

উদাহরণ:

<?php
class Person {
    public $name;

    function __construct( $name ) {
        $this->name = $name;
    }
};

$jack = new Person('Jack');
echo $jack->name;

এটি তৈরি করা বস্তুর সম্পত্তি হিসাবে 'জ্যাক' স্ট্রিং সংরক্ষণ করে।


1
কিলার পিএইচপি ওওপি টিউটোরিয়ালে অনুরূপ উদাহরণ কোড দেখেছি :) খুনিখুনি
এডসন

সুন্দর এবং সহজ ব্যাখ্যা। @ মিডার ওমরালিভিভ
পাই

40

$thisপিএইচপি- র পরিবর্তনশীল সম্পর্কে জানার সর্বোত্তম উপায় হ'ল বিভিন্ন প্রসঙ্গে দোভাষীর বিপরীতে চেষ্টা করা:

print isset($this);              //true,   $this exists
print gettype($this);            //Object, $this is an object 
print is_array($this);           //false,  $this isn't an array
print get_object_vars($this);    //true,   $this's variables are an array
print is_object($this);          //true,   $this is still an object
print get_class($this);          //YourProject\YourFile\YourClass
print get_parent_class($this);   //YourBundle\YourStuff\YourParentClass
print gettype($this->container); //object
print_r($this);                  //delicious data dump of $this
print $this->yourvariable        //access $this variable with ->

সুতরাং $thisসিউডো-ভেরিয়েবলের বর্তমান অবজেক্টের পদ্ধতি এবং বৈশিষ্ট্য রয়েছে। এই জাতীয় জিনিস দরকারী কারণ এটি আপনাকে ক্লাসের মধ্যে সমস্ত সদস্য ভেরিয়েবল এবং সদস্য পদ্ধতি অ্যাক্সেস করতে দেয়। উদাহরণ স্বরূপ:

Class Dog{
    public $my_member_variable;                             //member variable

    function normal_method_inside_Dog() {                   //member method

        //Assign data to member variable from inside the member method
        $this->my_member_variable = "whatever";

        //Get data from member variable from inside the member method.
        print $this->my_member_variable;
    }
}

$thisObjectআপনার জন্য দোভাষী দ্বারা তৈরি করা হয়েছিল এমন একটি পিএইচপি সম্পর্কিত রেফারেন্স , এতে ভেরিয়েবলের অ্যারে রয়েছে।

আপনি যদি $thisকোনও সাধারণ শ্রেণিতে একটি সাধারণ পদ্ধতির অভ্যন্তরে কল করেন তবে $thisসেই পদ্ধতিটি অন্তর্ভুক্ত অবজেক্ট (শ্রেণি) প্রদান করে।

$thisপ্রসঙ্গে যদি কোনও প্যারেন্ট অবজেক্ট না থাকে তবে অপরিজ্ঞাত হওয়া সম্ভব ।

পিএইচপি.net পিএইচপি অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং এবং $thisপ্রসঙ্গে নির্ভর করে কীভাবে আচরণ করে সে সম্পর্কে কথা বলার একটি বড় পৃষ্ঠা রয়েছে । https://www.php.net/manual/en/language.oop5.basic.php


দুর্দান্ত ব্যাখ্যা। কেবল যুক্ত করতে চাই $ এটি সিউডো অবজেক্ট / ভেরিয়েবল হিসাবে বিবেচনা করা যেতে পারে যা বর্তমান শ্রেণীর বৈশিষ্ট্যগুলিতে অ্যাক্সেস করতে সহায়তা করে।
এস .আলভী

17

আমি এর পুরানো প্রশ্ন জানি, যাইহোক - এই সম্পর্কে আরও সঠিক ব্যাখ্যা । $ পর্যন্ত এই প্রধানত একটি বর্গ বৈশিষ্ট্য নির্দেশ করতে ব্যবহার করা হয়।

উদাহরণ:

Class A
{
   public $myname;    //this is a member variable of this class

function callme() {
    $myname = 'function variable';
    $this->myname = 'Member variable';
    echo $myname;                  //prints function variable
    echo $this->myname;              //prints member variable
   }
}

আউটপুট:

function variable

member variable

9

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

থেকে পিএইচপি ডক্স :

সিউডো-ভেরিয়েবল $ এটি উপলব্ধ থাকে যখন কোনও পদ্ধতির কোনও অবজেক্ট প্রসঙ্গে থেকে ডাকা হয়। $ এটি হ'ল কলিং অবজেক্টের একটি রেফারেন্স (সাধারণত অবজেক্টটি যার সাথে মেথডটি অন্তর্ভুক্ত হয় তবে সম্ভবত অন্য কোনও অবজেক্ট, যদি পদ্ধতিটি কোনও গৌণ বস্তুর প্রেক্ষাপট থেকে স্ট্যাটিকভাবে বলা হয়)।


7

আমরা যদি এটি ব্যবহার না করি তবে কী ঘটে তা দেখা যাক - এটি নীচের কোড স্নিপেটের সাথে একই নামের সাথে ভেরিয়েবল এবং কনস্ট্রাক্টর যুক্তি যুক্ত করার চেষ্টা করুন

<?php

class Student {
    public $name;

    function __construct( $name ) {
        $name = $name;
    }
};

$tom = new Student('Tom');
echo $tom->name;

?>

এটি ইকোস ছাড়া আর কিছুই নয়

<?php

class Student {
    public $name;

    function __construct( $name ) {
        $this->name = $name; // Using 'this' to access the student's name
    }
};

$tom = new Student('Tom');
echo $tom->name;

?>

এই প্রতিধ্বনি 'টম'


2
আপনার কোড স্নিপেটগুলি উভয়ই হুবহু, বা আমি কিছু অনুপস্থিত?
ডেমেন্টো

@ ডিমেন্টো: হ্যাঁ $thisদ্বিতীয় কনস্ট্রাক্টর ব্যবহার করে আমি এটি ঠিক করেছি ।
এক্সেল গুইলিন

নাম = $ নাম কেন আমাকে শিক্ষার্থীর নাম অ্যাক্সেস করতে দেয় না তা বোঝাতে আপনি কি আপত্তি করবেন? এটি আমার কাছে বোধগম্য নয়।
মার্কো ফ্লোরিয়ানো

মারিও, এটা সুযোগের কারণে। ফাংশনের ভিতরে $nameটম থাকে তবে ফাংশনের বাইরে এর কোনও মূল্য থাকে না, কারণ এর পরিধিটি ফাংশনটির মধ্যে সীমাবদ্ধ।
দেয়ারসিনা

4

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

মধ্যস্থতার উদাহরণের আরও একটি সংস্করণ:

class Person {

    protected $name;  //can't be accessed from outside the class

    public function __construct($name) {
        $this->name = $name;
    }

    public function getName() {
        return $this->name;
    }
}
// this line creates an instance of the class Person setting "Jack" as $name.  
// __construct() gets executed when you declare it within the class.
$jack = new Person("Jack"); 

echo $jack->getName();

Output:

Jack


2

$ এটি একটি বিশেষ পরিবর্তনশীল এবং এটি একই অবজেক্টকে বোঝায় ie নিজেই।

এটি প্রকৃতপক্ষে বর্তমান শ্রেণীর উদাহরণ উল্লেখ করে

এখানে একটি উদাহরণ যা উপরের বিবৃতিটি পরিষ্কার করবে

<?php
 class Books {
  /* Member variables */
  var $price;
  var $title;

  /* Member functions */
  function setPrice($par){
     $this->price = $par;
  }

  function getPrice(){
     echo $this->price ."<br/>";
  }

  function setTitle($par){
     $this->title = $par;
  }

  function getTitle(){
     echo $this->title ." <br/>";
  }
}
?> 

দয়া করে এটি আরও কিছুটা ব্যাখ্যা করুন
নীরজ রাঠোদ

2

এটি দীর্ঘ বিস্তারিত ব্যাখ্যা। আমি আশা করি এটি প্রাথমিকভাবে সাহায্য করবে। আমি এটা খুব সহজ করব।

প্রথমে একটি ক্লাস তৈরি করা যাক

<?php 

class Class1
{
    
}

আপনি পিএইচপি বন্ধ করার ট্যাগ বাদ দিতে পারেন ?> যদি পিএইচপি কোড ব্যবহার করেন তবে আপনি পারেন।

এখন আসুন বৈশিষ্ট্য এবং একটি পদ্ধতি ভিতরে Class1

<?php 

class Class1
{
    public $property1 = "I am property 1";
    public $property2 = "I am property 2";

    public function Method1()
    {
        return "I am Method 1";
    }
}

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

পদ্ধতিটি কেবল একটি সাধারণ ফাংশন, তবে আমরা বলি পদ্ধতিটি ক্লাসের অভ্যন্তরেও থাকে uz

দ্য publicমানে শব্দ যে পদ্ধতি বা একটি সম্পত্তি স্ক্রিপ্ট কোথাও অ্যাক্সেস করতে পারবেন।

এখন, আমরা কীভাবে বৈশিষ্ট্য এবং পদ্ধতিটি ভিতরে ব্যবহার করতে পারি Class1 ?

উত্তরটি একটি উদাহরণ বা একটি অবজেক্ট তৈরি করছে, কোনও বিষয়টিকে শ্রেণীর অনুলিপি হিসাবে ভাবেন।

<?php 

class Class1
{
    public $property1 = "I am property 1";
    public $property2 = "I am property 2";

    public function Method1()
    {
        return "I am Method 1";
    }
}

$object1 = new Class1;
var_dump($object1);

আমরা একটি অবজেক্ট তৈরি করেছি $object1, যা Class1এটির সমস্ত সামগ্রীর অনুলিপি । এবং আমরা $object1ব্যবহারের সমস্ত বিষয়বস্তু ফেলে দিয়েছি var_dump()

এই আপনাকে দেবে

object(Class1)#1 (2) { ["property1"]=> string(15) "I am property 1" ["property2"]=> string(15) "I am property 2" }

তাই বিষয়বস্তু Class1রয়েছে $object1ছাড়া Method1, আমি জানি না যখন বস্তু ডাম্পিং কেন পদ্ধতি দেখায় না।

এখন যদি আমরা $property1কেবল অ্যাক্সেস করতে চাই what এটি সহজ, আমরা এটি করি var_dump($object1->property1);, আমরা কেবল যুক্ত করেছি ->property1, আমরা এটির দিকে লক্ষ্য করেছি।

আমরাও অ্যাক্সেস করতে Method1()পারি, করি var_dump($object1->Method1());

এখন ধরুন আমি $property1ভিতরে থেকে অ্যাক্সেস করতে চাই Method1(), আমি এটি করব

<?php 

class Class1
{
    public $property1 = "I am property 1";
    public $property2 = "I am property 2";

    public function Method1()
    {   
        $object2 = new Class1;
        return $object2->property1;
    }
}

$object1 = new Class1;
var_dump($object1->Method1()); 

আমরা তৈরি করেছি $object2 = new Class1;যা এর একটি নতুন অনুলিপি Class1বা আমরা উদাহরণ বলতে পারি। তারপর আমরা property1থেকে ইশারা$object2

return $object2->property1;

এটি string(15) "I am property 1"ব্রাউজারে মুদ্রণ করবে ।

পরিবর্তে এখন ভিতরে এটি করার Method1()

$object2 = new Class1;
return $object2->property1;

আমরা এই কাজ

return $this->property1;

$thisঅবজেক্ট শ্রেণী নিজেই উল্লেখ করতে বর্গ ভিতরে ব্যবহার করা হয়।

এটি নতুন অবজেক্ট তৈরি করার এবং তারপরে এ জাতীয় ফেরত দেওয়ার বিকল্প

$object2 = new Class1;
return $object2->property1;

আরেকটি উদাহরণ

<?php 

class Class1
{
    public $property1 = 119;
    public $property2 = 666;
    public $result;

    public function Method1()
    {   
        $this->result = $this->property1 + $this->property2;
        return $this->result;
    }
}

$object1 = new Class1;
var_dump($object1->Method1());

আমরা পূর্ণসংখ্যাযুক্ত 2 টি বৈশিষ্ট্য তৈরি করেছি এবং তারপরে আমরা সেগুলি যুক্ত করে ফলাফলটি রেখেছি $this->result

ঐটা ভুলে যেও না

$this->property1= $property1=119

তাদের একই মান আছে .. ইত্যাদি

আমি আশা করি যে ধারণাটি ব্যাখ্যা করে।

এই সিরিজের ভিডিওগুলি আপনাকে ওওপিতে অনেক সহায়তা করবে

https://www.youtube.com/playlist?list=PLe30vg_FG4OSEHH6bRF8FrA7wmoAMUZLv


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