আমি কোনও শ্রেণীর অভ্যন্তরে একটি ধ্রুবককে কীভাবে সংজ্ঞায়িত করতে পারি এবং এটি এত সহজে দৃশ্যমান করতে পারি যখন শ্রেণি প্রসঙ্গে বলা হয়?
....কিছুটা এইরকম Foo::app()->MYCONSTANT;
(এবং যদি MYCONSTANT
উপেক্ষা করা পছন্দ হয়)
আমি কোনও শ্রেণীর অভ্যন্তরে একটি ধ্রুবককে কীভাবে সংজ্ঞায়িত করতে পারি এবং এটি এত সহজে দৃশ্যমান করতে পারি যখন শ্রেণি প্রসঙ্গে বলা হয়?
....কিছুটা এইরকম Foo::app()->MYCONSTANT;
(এবং যদি MYCONSTANT
উপেক্ষা করা পছন্দ হয়)
উত্তর:
ক্লাস কনস্ট্যান্ট দেখুন :
class MyClass
{
const MYCONSTANT = 'constant value';
function showConstant() {
echo self::MYCONSTANT. "\n";
}
}
echo MyClass::MYCONSTANT. "\n";
$classname = "MyClass";
echo $classname::MYCONSTANT. "\n"; // As of PHP 5.3.0
$class = new MyClass();
$class->showConstant();
echo $class::MYCONSTANT."\n"; // As of PHP 5.3.0
এই ক্ষেত্রে অনুনাদী সালে MYCONSTANT
নিজে একটি অনির্ধারিত ধ্রুবক এবং আউটপুট সম্পর্কে একটি বিজ্ঞপ্তি বাড়াতে হবে ধ্রুবক নাম একটি স্ট্রিং রূপান্তর: "MYCONSTANT"
।
সম্পাদনা - সম্ভবত আপনি যা খুঁজছেন তা এই স্থির বৈশিষ্ট্য / ভেরিয়েবল :
class MyClass
{
private static $staticVariable = null;
public static function showStaticVariable($value = null)
{
if ((is_null(self::$staticVariable) === true) && (isset($value) === true))
{
self::$staticVariable = $value;
}
return self::$staticVariable;
}
}
MyClass::showStaticVariable(); // null
MyClass::showStaticVariable('constant value'); // "constant value"
MyClass::showStaticVariable('other constant value?'); // "constant value"
MyClass::showStaticVariable(); // "constant value"
(is_null(self::$staticVariable) === true) && (isset($value) === true)
হিসাবে অনেক বেশি সংহত হবে self::$staticVariable === null && $value !== null
। $value
সর্বদা ফাংশনের অভ্যন্তরে সেট করা হবে , তাই ব্যবহার করার দরকার নেই isset
। এবং হাইপার-স্পষ্ট === true
কিছু কিছুই যোগ করে না।
এটি এবং পুরানো প্রশ্ন, তবে এখন পিএইচপি 7.1 এ আপনি ধ্রুবকটির দৃশ্যমানতা সংজ্ঞায়িত করতে পারেন।
উদাহরণ
<?php
class Foo {
// As of PHP 7.1.0
public const BAR = 'bar';
private const BAZ = 'baz';
}
echo Foo::BAR . PHP_EOL;
echo Foo::BAZ . PHP_EOL;
?>
পিএইচপি 7.1 উপরের উদাহরণটির আউটপুট:
বার মারাত্মক ত্রুটি: অবহিত ত্রুটি: ব্যক্তিগত কনস্ট্রেট ফু :: BAZ এ অ্যাক্সেস করা যায় না ...
দ্রষ্টব্য: পিএইচপি 7.1.0 অনুসারে শ্রেণিবদ্ধদের জন্য ভিজিবিলিটি সংশোধক অনুমোদিত allowed
আরও তথ্য এখানে
class Foo {
const BAR = 'baz';
}
echo Foo::BAR;
এটি ক্লাসের ধ্রুবক তৈরির একমাত্র উপায় । এই ধ্রুবকগুলির মাধ্যমে সর্বদা বিশ্বব্যাপী অ্যাক্সেসযোগ্য Foo::BAR
তবে এগুলি কেবলমাত্র অ্যাক্সেসযোগ্য নয় BAR
।
এর মতো একটি সিনট্যাক্স অর্জন করতে Foo::baz()->BAR
, আপনার baz()
শ্রেণীর ফাংশন থেকে Foo
কোনও সম্পত্তি রয়েছে এমন কোনও জিনিস ফেরত দিতে হবে BAR
। যদিও এটি একটি ধ্রুবক নয়। আপনার নির্ধারিত যে ধ্রুবক সর্বদা বিশ্বব্যাপী যে কোনও জায়গা থেকে অ্যাক্সেসযোগ্য এবং ফাংশন কল ফলাফলগুলিতে সীমাবদ্ধ করা যায় না।
এটি বেশ পুরানো প্রশ্ন, তবে সম্ভবত এই উত্তরটি এখনও অন্য কাউকে সহায়তা করতে পারে।
প্রাক-সংজ্ঞায়িত মানটি প্রদান করে এমন একটি পদ্ধতিতে চূড়ান্ত কীওয়ার্ড প্রয়োগ করে আপনি শ্রেণীর ক্ষেত্রের মধ্যে সীমাবদ্ধ এমন একটি সার্বজনীন ধ্রুবক অনুকরণ করতে পারেন:
class Foo {
// This is a private constant
final public MYCONSTANT()
{
return 'MYCONSTANT_VALUE';
}
}
কোনও পদ্ধতির চূড়ান্ত কীওয়ার্ডটি একটি প্রসারিত শ্রেণিকে পদ্ধতিটিকে পুনরায় সংজ্ঞায়িত করতে বাধা দেয়। আপনি ক্লাস ঘোষণার সামনেও চূড়ান্ত কীওয়ার্ডটি রাখতে পারেন, সেক্ষেত্রে কীওয়ার্ডটি শ্রেণি উত্তরাধিকারকে বাধা দেয়।
অ্যালেক্স নীচের কোডটি সন্ধান করছিল ঠিক কীভাবে তা পেতে ব্যবহার করা যেতে পারে:
final class Constants {
public MYCONSTANT()
{
return 'MYCONSTANT_VALUE';
}
}
class Foo {
static public app()
{
return new Constants();
}
}
এমুলেটেড ধ্রুবক মানটি এর মতো অ্যাক্সেসযোগ্য হবে:
Foo::app()->MYCONSTANT();
আপনি পিএইচপি তে একটি শ্রেণির ধ্রুবক সংজ্ঞায়িত করতে পারেন। তবে আপনার ক্লাস ধ্রুবকটি কোনও বস্তুর উদাহরণ থেকেও অ্যাক্সেসযোগ্য হবে। এটি পিএইচপি এর কার্যকারিতা। যাইহোক, পিএইচপি 7.1 হিসাবে , আপনি অ্যাক্সেস মডিফায়ারগুলি ( public
, private
বা protected
) দিয়ে আপনার শ্রেণি ধ্রুবককে সংজ্ঞায়িত করতে পারেন ।
একটি কাজ প্রায় হিসাবে আপনার ধ্রুবক সংজ্ঞায়িত করতে হবে private
বা protected
এবং তারপর তাদের একটি মাধ্যমে পাঠযোগ্য static function
। স্থির প্রসঙ্গ থেকে যদি ডাকা হয় তবে এই ফাংশনটি কেবল ধ্রুবক মানগুলি ফিরিয়ে আনতে হবে।
আপনি আপনার প্যারেন্ট ক্লাসে এই স্থিতিকর কাজটিও তৈরি করতে পারেন এবং এটি ডিফল্ট কার্যকারিতা তৈরি করতে অন্য সমস্ত শ্রেণিতে কেবল এই প্যারেন্ট ক্লাসের উত্তরাধিকারী হতে পারেন।
ক্রেডিট: http://dwellupper.io/post/48/defining-class-constants-in-php