পিএইচপি 5 এ, ব্যবহার const
এবং এর মধ্যে পার্থক্য কী static
?
যখন প্রতিটি উপযুক্ত? এবং কোন ভূমিকা পালন করে public
, protected
এবং private
অভিনয় করে - যদি থাকে?
পিএইচপি 5 এ, ব্যবহার const
এবং এর মধ্যে পার্থক্য কী static
?
যখন প্রতিটি উপযুক্ত? এবং কোন ভূমিকা পালন করে public
, protected
এবং private
অভিনয় করে - যদি থাকে?
উত্তর:
শ্রেণীর প্রসঙ্গে স্ট্যাটিক ভেরিয়েবলগুলি ক্লাস স্কোপ (অবজেক্ট নয়) স্কোপে থাকে তবে কনস্টের বিপরীতে তাদের মানগুলি পরিবর্তন করা যায়।
class ClassName {
static $my_var = 10; /* defaults to public unless otherwise specified */
const MY_CONST = 5;
}
echo ClassName::$my_var; // returns 10
echo ClassName::MY_CONST; // returns 5
ClassName::$my_var = 20; // now equals 20
ClassName::MY_CONST = 20; // error! won't work.
সরকারী, সুরক্ষিত এবং ব্যক্তিগত কনসেটগুলির ক্ষেত্রে অপ্রাসঙ্গিক (যা সর্বদা প্রকাশ্য); স্ট্যাটিক ভেরিয়েবল সহ এগুলি কেবল শ্রেণি পরিবর্তকের জন্য কার্যকর।
সম্পাদনা করুন: এটি লক্ষ করা জরুরী যে পিএইচপি 7.1.0 শ্রেণিবদ্ধদের দৃশ্যমানতা নির্দিষ্ট করার জন্য সমর্থন প্রবর্তন করেছিল ।
$
? static $my_var = 10;
সংজ্ঞায়
static
ভেরিয়েবলগুলি সিঙ্গেলন এবং পুনরাবৃত্ত ফাংশনেও খুব দরকারী explains কারণ আপনি মানটি পরিবর্তন করতে পারেন তবে পরিবর্তনশীল কেবল একবারই শুরু করা হবে। কীভাবে একটি সিঙ্গলটন তৈরি করবেন তার আরও তথ্যের জন্য stackoverflow.com/questions/203336/… দেখুন । আমার জন্য সেগুলি এমন কিছু পরিস্থিতি যেখানে আমি স্থির পরিবর্তনশীলকে পছন্দ করি।
একটি শেষ পয়েন্ট যা করা উচিত তা হ'ল একটি কনস্ট সবসময় স্থির এবং সর্বজনীন। এর অর্থ আপনি বর্গের মধ্যে থেকে কনস্টিকে অ্যাক্সেস করতে পারবেন:
class MyClass
{
const MYCONST = true;
public function test()
{
echo self::MYCONST;
}
}
শ্রেণীর বাইরে থেকে আপনি এটি এতে অ্যাক্সেস করতে পারবেন:
echo MyClass::MYCONST;
স্থায়ী শুধু একটি ধ্রুবক, IE আপনি ঘোষণা পর এর মান পরিবর্তন করতে পারবেন না।
স্ট্যাটিক ভেরিয়েবল কোনও শ্রেণীর উদাহরণ তৈরি না করেই অ্যাক্সেসযোগ্য এবং তাই শ্রেণীর সমস্ত দৃষ্টান্তের মধ্যে ভাগ করা যায়।
এছাড়াও, কোনও ফাংশনে স্থিতিশীল স্থানীয় পরিবর্তনশীল থাকতে পারে যা কেবল একবার ঘোষিত হয় (কোনও ফাংশন প্রথম প্রয়োগের সময়) এবং ফাংশন কলগুলির মধ্যে এর মান সংরক্ষণ করতে পারে, উদাহরণস্বরূপ:
function foo()
{
static $numOfCalls = 0;
$numOfCalls++;
print("this function has been executed " . $numOfCalls . " times");
}
শ্রেণীর উত্তরাধিকার সম্পর্কে কথা বলার সময় আপনি self
এবং static
কী শব্দ ব্যবহার করে বিভিন্ন স্কোপের ধ্রুবক বা পরিবর্তনশীল মধ্যে পার্থক্য করতে পারেন । কীভাবে অ্যাক্সেস করবেন তা এই উদাহরণটিতে দেখুন:
class Person
{
static $type = 'person';
const TYPE = 'person';
static public function getType(){
var_dump(self::TYPE);
var_dump(static::TYPE);
var_dump(self::$type);
var_dump(static::$type);
}
}
class Pirate extends Person
{
static $type = 'pirate';
const TYPE = 'pirate';
}
এবং তারপরে:
$pirate = new Pirate();
$pirate::getType();
বা:
Pirate::getType();
আউটপুট:
string(6) "person"
string(6) "pirate"
string(6) "person"
string(6) "pirate"
অন্য কথায় self::
স্থিতিশীল সম্পত্তি এবং স্থিতিশীল বৈশিষ্ট্যকে একই স্কোপ থেকে বোঝানো হয় যেখানে এটি বলা হচ্ছে (এই ক্ষেত্রে Person
সুপারক্লাস), যখন static::
সম্পত্তি অ্যাক্সেস করবে এবং রান টাইমে স্কোপ থেকে ধ্রুবক থাকবে (সুতরাং Pirate
সাবক্লাসে এই ক্ষেত্রে )।
এখানে পিএইচপিএনটিমে দেরীতে স্থির বাইন্ডিং সম্পর্কে আরও পড়ুন ।
এছাড়াও এখানে এবং এখানে অন্য প্রশ্নের উত্তর পরীক্ষা করে দেখুন ।
কোনও শ্রেণি পদ্ধতি বা সম্পত্তি স্থিতিশীল হিসাবে ঘোষণা করা তাদের ক্লাসের ইনস্ট্যানটিশনের প্রয়োজন ছাড়াই অ্যাক্সেসযোগ্য করে তোলে।
একটি শ্রেণির ধ্রুবক হ'ল সাধারণ ধ্রুবকের মতো, রানটাইমে এটি পরিবর্তন করা যায় না। আপনি কখনও কখনও কনস্ট ব্যবহার করবেন না এটিই একমাত্র কারণ।
ব্যক্তিগত, সর্বজনীন এবং সুরক্ষিত হ'ল অ্যাক্সেস মডিফায়ারগুলি যা বর্ণনা করে যে কোন প্যারামিটার / পদ্ধতিতে কারা অ্যাক্সেস করতে পারে।
সর্বজনীন মানে অন্যান্য সমস্ত বস্তু অ্যাক্সেস পায়। ব্যক্তিগত অর্থ হ'ল কেবল তাত্ক্ষণিক শ্রেণি অ্যাক্সেস পায়। সুরক্ষিত অর্থ হ'ল তাত্ক্ষণিক শ্রেণি এবং উত্পন্ন ক্লাসগুলি অ্যাক্সেস পায়।
স্থির সদস্য, ধ্রুবক ভেরিয়েবল এবং অ্যাক্সেস মডিফায়ার (ব্যক্তিগত, সর্বজনীন এবং সুরক্ষিত) সম্পর্কে আমি এতক্ষণ যা শিখেছি তা এখানে। ধ্রুব
সংজ্ঞা
নামটির মতো ধ্রুবক ভেরিয়েবলের মানগুলি পরিবর্তন করা যায় না on কনস্ট্যান্টসগুলি সাধারণ ভেরিয়েবলের থেকে পৃথক যে আপনি declare চিহ্নটি তাদের ঘোষণা বা ব্যবহার করার জন্য ব্যবহার করেন না।
মানটি অবশ্যই একটি ধ্রুবক প্রকাশ হতে পারে (উদাহরণস্বরূপ) কোনও পরিবর্তনক, সম্পত্তি, গাণিতিক ক্রিয়াকলাপের ফলাফল বা কোনও ফাংশন কল নয়।
দ্রষ্টব্য: ভেরিয়েবলের মান কোনও মূলশব্দ হতে পারে না (উদাঃ স্ব, পিতা বা মাতা এবং স্থির)।
পিএইচপি-তে একটি ধ্রুবক ঘোষণা করা
<?php
class constantExample{
const CONSTANT = 'constant value'; //constant
}
?>
কনস্ট্যান্টের স্কোপ বিশ্বব্যাপী এবং স্ব কীওয়ার্ড ব্যবহার করে অ্যাক্সেস করা যায়
<?php
class MyClass
{
const CONSTANT = 'constant value';
function showConstant() {
echo self::CONSTANT . "\n";
}
}
echo MyClass::CONSTANT . "\n";
$classname = "MyClass";
echo $classname::CONSTANT . "\n"; // As of PHP 5.3.0
$class = new MyClass();
$class->showConstant();
echo $class::CONSTANT."\n"; // As of PHP 5.3.0
?>
স্থির
সংজ্ঞা
স্ট্যাটিক কীওয়ার্ডটি ক্লাস, মেম্বার ফাংশন বা ভেরিয়েবল ঘোষণার জন্য ব্যবহার করা যেতে পারে a ক্লাসে স্ট্যাটিক সদস্যরা স্ব-কীওয়ার্ড ব্যবহার করেও অ্যাক্সেস করতে পারবেন class শ্রেণীর বৈশিষ্ট্য বা পদ্ধতিগুলি স্ট্যাটিক হিসাবে বর্ণনা করে তাদের ক্লাসের ইনস্ট্যানটিশনের প্রয়োজন ছাড়াই অ্যাক্সেসযোগ্য করে তোলে । স্থির হিসাবে ঘোষিত একটি সম্পত্তি তাত্ক্ষণিক শ্রেণীর অবজেক্টের সাথে অ্যাক্সেস করা যায় না (যদিও স্থির পদ্ধতিটি পারে)। যদি কোনও দৃশ্যমানতার ঘোষণাপত্র (জনসাধারণ, ব্যক্তিগত, সুরক্ষিত) ব্যবহার না করা হয়, তবে সম্পত্তি বা পদ্ধতিটিকে জনসাধারণ হিসাবে ঘোষিত বলে গণ্য করা হবে ause কারণ স্থির পদ্ধতিগুলি তৈরি করা অবজেক্টের উদাহরণ ছাড়াই কলযোগ্য।
দ্রষ্টব্য: সিউডো-ভেরিয়েবল stat এটি স্ট্যাটিক হিসাবে ঘোষিত পদ্ধতির অভ্যন্তরে উপলব্ধ নয় the তীর অপারেটর ব্যবহার করে বস্তুর মাধ্যমে স্ট্যাটিক বৈশিষ্ট্য অ্যাক্সেস করা যাবে না ->
পিএইচপি 5.3.0 হিসাবে, একটি ভেরিয়েবল ব্যবহার করে শ্রেণিটি উল্লেখ করা সম্ভব। > ভেরিয়েবলের মান কোনও কীওয়ার্ড হতে পারে না (উদাঃ স্ব, পিতামাতার এবং স্থিতিশীল)।
স্থির সম্পত্তি উদাহরণ
<?php
class Foo
{
public static $my_static = 'foo'; //static variable
public static function staticValue() { //static function example
return self::$my_static; //return the static variable declared globally
}
}
?>
স্থির বৈশিষ্ট্য এবং ফাংশন উদাহরণ অ্যাক্সেস
<?php
print Foo::$my_static . "\n";
$foo = new Foo();
print $foo->staticValue() . "\n";
print $foo->my_static . "\n"; // Undefined "Property" my_static
print $foo::$my_static . "\n";
$classname = 'Foo';
print $classname::$my_static . "\n"; // As of PHP 5.3.0
print Bar::$my_static . "\n";
$bar = new Bar();
print $bar->fooStatic() . "\n";
?>
সরকারী, ব্যক্তিগত, সুরক্ষিত (একে একে অ্যাক্সেস মডিফায়ার)
নীচের সংজ্ঞাটি পড়ার আগে, এনক্যাপসুলেশন সম্পর্কে এই নিবন্ধটি পড়ুন। এটি আপনাকে ধারণাটি আরও গভীরভাবে বুঝতে সাহায্য করবে
টিউটোরিয়ালগুলি এনক্যাপসুলেশন সম্পর্কে পয়েন্ট লিঙ্ক
সংজ্ঞা
ব্যক্তিগত, সর্বজনীন, সুরক্ষিত কীওয়ার্ড ব্যবহার করে আপনি কোনও শ্রেণীর সদস্যদের অ্যাক্সেস নিয়ন্ত্রণ করতে পারেন। ঘোষিত শ্রেণীর সদস্যদের সর্বত্র অ্যাক্সেস করা যেতে পারে। সুরক্ষিত হিসাবে ঘোষিত সদস্যরা কেবল বর্গের মধ্যেই এবং উত্তরাধিকার সূত্রে প্রাপ্ত এবং পিতামাতার ক্লাসগুলির মাধ্যমে অ্যাক্সেস করতে পারে। ব্যক্তিগত হিসাবে ঘোষিত সদস্যরা কেবল সদস্যকে সংজ্ঞায়িত ক্লাস দ্বারা অ্যাক্সেস করতে পারে।
উদাহরণ
<?php
class Example{
public $variable = 'value'; // variable declared as public
protected $variable = 'value' //variable declared as protected
private $variable = 'value' //variable declared as private
public function functionName() { //public function
//statements
}
protected function functionName() { //protected function
//statements
}
private function functionName() { //private function
//statements
}
}
?>
সরকারী, ব্যক্তিগত এবং সুরক্ষিত সদস্যদের উদাহরণ অ্যাক্সেস করা
পাবলিক ভেরিয়েবলগুলি ক্লাসের বাইরে বা শ্রেণীর অভ্যন্তর থেকে অ্যাক্সেস এবং সংশোধন করা যেতে পারে। তবে আপনি ক্লাসের ভিতরে থেকেই ব্যক্তিগত এবং সুরক্ষিত ভেরিয়েবল এবং ফাংশনগুলি অ্যাক্সেস করতে পারবেন, আপনি শ্রেণীর বাইরে সুরক্ষিত বা পাবলিক সদস্যদের মান পরিবর্তন করতে পারবেন না।
<?php
class Example{
public $pbVariable = 'value';
protected $protVariable = 'value';
private $privVariable = 'value';
public function publicFun(){
echo $this->$pbVariable; //public variable
echo $this->$protVariable; //protected variable
echo $this->privVariable; //private variable
}
private function PrivateFun(){
//some statements
}
protected function ProtectedFun(){
//some statements
}
}
$inst = new Example();
$inst->pbVariable = 'AnotherVariable'; //public variable modifed from outside
echo $inst->pbVariable; //print the value of the public variable
$inst->protVariable = 'var'; //you can't do this with protected variable
echo $inst->privVariable; // This statement won't work , because variable is limited to private
$inst->publicFun(); // this will print the values inside the function, Because the function is declared as a public function
$inst->PrivateFun(); //this one won't work (private)
$inst->ProtectedFun(); //this one won't work as well (protected)
?>
আরও তথ্যের জন্য দৃশ্যমানতা পিএইচপি ডক সম্পর্কে এই পিএইচপি ডকুমেন্টেশন পড়ুন
তথ্যসূত্র: php.net
আমি আশা করি আপনি ধারণাটি বুঝতে পেরেছেন। পড়ার জন্য ধন্যবাদ :) :) একটি ভাল আছে
সুতরাং @ ম্যাট দুর্দান্ত উত্তরটি পুনরুদ্ধার করতে:
আপনার প্রয়োজনীয় সম্পত্তিটি পরিবর্তন করা উচিত নয়, তবে একটি ধ্রুবক যথাযথ পছন্দ
যদি আপনার প্রয়োজনীয় সম্পত্তিটি পরিবর্তন করার অনুমতি দেওয়া হয় তবে তার পরিবর্তে স্থির ব্যবহার করুন
উদাহরণ:
class User{
private static $PASSWORD_SALT = "ASD!@~#asd1";
...
}
class Product{
const INTEREST = 0.10;
...
}
সম্পাদনা করুন: এটি লক্ষ করা জরুরী যে পিএইচপি 7.1.0 শ্রেণিবদ্ধদের দৃশ্যমানতা নির্দিষ্ট করার জন্য সমর্থন প্রবর্তন করেছিল ।
self::$variable
সুরক্ষিত স্ট্যাটিক এবং প্রাইভেট স্ট্যাটিক ভেরিয়েবলগুলির জন্য ব্যবহার করতে পছন্দ করি কারণ আমি ক্লাসের নামটি কেবল একবার নিজের মধ্যে বর্ণিত রাখতে পছন্দ করি যা ক্লাসের একেবারে শুরুতে।