পিএইচপি 5.2+ বিমূর্ত স্ট্যাটিক শ্রেণীর পদ্ধতিগুলি কেন অস্বীকার করে?


121

পিএইচপি 5.2-তে কঠোর সতর্কতা সক্রিয় করার পরে, আমি এমন কোনও প্রকল্পের কঠোর মানক সতর্কবার্তা দেখেছি যা মূলত কঠোর সতর্কতা ছাড়াই লিখিত হয়েছিল:

কঠোর মান : স্ট্যাটিক ফাংশন প্রোগ্রাম :: getSelectSQL () বিমূর্ত করা উচিত হবে না Program.class.inc মধ্যে

প্রশ্নে ফাংশনটি একটি বিমূর্ত অভিভাবক শ্রেণীর প্রোগ্রামের সাথে সম্পর্কিত এবং এটি অ্যাবস্ট্রাক্ট স্ট্যাটিক হিসাবে ঘোষণা করা হয়েছে কারণ এটি টিভি প্রোগ্রামের মতো তার শিশু শ্রেণিতে প্রয়োগ করা উচিত।

আমি এই পরিবর্তনের রেফারেন্সগুলি এখানে পেয়েছি :

বিমূর্ত স্ট্যাটিক বর্গ ফাংশন বাদ দেওয়া। পর্যবেক্ষণের কারণে, পিএইচপি 5.0.x এবং 5.1.x ক্লাসগুলিতে বিমূর্ত স্থির ফাংশনকে অনুমতি দেয়। পিএইচপি 5.2.x হিসাবে, কেবলমাত্র ইন্টারফেসগুলিতে সেগুলি থাকতে পারে।

আমার প্রশ্ন হ'ল পিএইচপি-তে কোনও বিমূর্ত স্থির ক্রিয়াকলাপ কেন হওয়া উচিত নয় তা কি কেউ একটি সুস্পষ্ট উপায়ে ব্যাখ্যা করতে পারেন?


12
নতুন পাঠকদের মনে রাখা উচিত যে এই অযৌক্তিক
মার্ক অ্যামেরি

উত্তর:


76

স্থির পদ্ধতিগুলি শ্রেণীর অন্তর্ভুক্ত যা তাদের ঘোষণা করে declared শ্রেণিটি প্রসারিত করার সময় আপনি একই নামের একটি স্ট্যাটিক পদ্ধতি তৈরি করতে পারেন, তবে আপনি বাস্তবে একটি স্ট্যাটিক বিমূর্ত পদ্ধতি প্রয়োগ করছেন না।

অবিচলিত পদ্ধতিগুলির সাথে কোনও শ্রেণি প্রসারিত করার ক্ষেত্রে একই। আপনি যদি সেই শ্রেণিটি প্রসারিত করেন এবং একই স্বাক্ষরের একটি স্ট্যাটিক পদ্ধতি তৈরি করেন, আপনি আসলে সুপারক্লাসের স্ট্যাটিক পদ্ধতিটিকে ওভাররাইড করছেন না

সম্পাদনা (16 সেপ্টেম্বর, ২০০৯) এ সম্পর্কে
আপডেট। পিএইচপি 5.3 চালানো, আমি দেখতে পাচ্ছি যে ভাল বা অসুস্থতার জন্য বিমূর্ত স্ট্যাটিক ফিরে এসেছে। ( আরও তথ্যের জন্য দেখুন http://php.net/lsb )

সংশোধন (ফিলফ্রেও দ্বারা)
abstract staticএখনও পিএইচপি 5.3 এ অনুমোদিত নয়, এলএসবি সম্পর্কিত তবে ভিন্ন।


3
ঠিক আছে, তাই যদি আমি আমার বিমূর্ত শ্রেণীর প্রসারিত সমস্ত বাচ্চার মধ্যে ফাংশন getSelectSQL () প্রয়োজনের প্রয়োগ করতে চাই? প্যারেন্ট ক্লাসে getSelectSQL () থাকার কোনও বৈধ কারণ নেই। কর্মের সেরা পরিকল্পনা কি? আমি বিমূর্ত স্থিতি বেছে নেওয়ার কারণটি হ'ল আমি সমস্ত বাচ্চায় getSelectSQL () প্রয়োগ না করা পর্যন্ত কোডটি সংকলন করবে না।
আর্টেম রাশাকোভস্কিই

1
সম্ভবত, আপনার জিনিসগুলি আবার নকশা করা উচিত যাতে getSelectSQL () একটি বিমূর্ত / উদাহরণ / পদ্ধতি। এইভাবে, / প্রতিটি দৃষ্টান্ত / প্রতিটি সন্তানের এই জাতীয় পদ্ধতি থাকবে।
ম্যাথু ফ্ল্যাশেন

7
বিমূর্ত স্থির এখনও পিএইচপি 5.3 এ অনুমোদিত নয়। দেরীতে স্থির বাইন্ডিংগুলির এর সাথে কোনও সম্পর্ক নেই। এছাড়াও দেখুন স্ট্যাকওভারফ্লো.com
প্রশ্নগুলি /

40
আমার মতে এই কঠোর সতর্কবাণীটি কেবল বোকা, যেহেতু পিএইচপি'র "লেট স্ট্যাটিক বন্ডিং" রয়েছে, যা স্বাভাবিকভাবেই স্থির পদ্ধতি ব্যবহার করার ধারণা সরবরাহ করে যেন শ্রেণি নিজেই কোনও বস্তু হয়ে থাকে (যেমন, রুবিতে)। যা স্থিতিশীল পদ্ধতি ওভারলোডিং বাড়ে abstract staticএবং এই ক্ষেত্রে দরকারী হতে পারে।
দিমিত্রি

4
এই উত্তরটি অস্পষ্টভাবে ভুল। "তবুও অনুমোদিত নয়" কেবলমাত্র আপনি একটি E_STRICT স্তর সতর্কতা পাবেন, কমপক্ষে 5.3+ এ আপনি বিমূর্ত স্ট্যাটিক ফাংশন তৈরি করতে, এগুলি বর্ধিত শ্রেণিতে প্রয়োগ করতে এবং তারপরে স্থিতিশীল :: কীওয়ার্ডের মাধ্যমে উল্লেখ করুন perfectly স্পষ্টতই পিতামাত্ত শ্রেণীর স্ট্যাটিক সংস্করণটি এখনও রয়েছে এবং এটি সরাসরি (স্ব: :: বা স্ট্যাটিকের মাধ্যমে ic শ্রেণীর অভ্যন্তরে) বলা যায় না কারণ এটি বিমূর্ত এবং মারাত্মকভাবে ত্রুটিযুক্ত হবে যেন আপনি কোনও নিয়মিত অ-স্থিতিক বিমূর্ত ফাংশন বলেছিলেন। কার্যত এটি কার্যকর, আমি @ ডিমেট্রি সংবেদনের সাথে একমত হই agree
আহফনার

79

এটি একটি দীর্ঘ, দুঃখের গল্প।

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

<?php

abstract class ParentClass {
    static function foo() {
        echo "I'm gonna do bar()";
        self::bar();
    }

    abstract static function bar();
}

class ChildClass extends ParentClass {
    static function bar() {
        echo "Hello, World!";
    }
}

ChildClass::foo();

কঠোর মোডের সতর্কতাটি বাদ দিয়ে উপরের কোডটি কার্যকর করে না। self::bar()কল foo()স্পষ্টভাবে উল্লেখ bar()পদ্ধতি ParentClass, এমনকি যখন foo()একটি পদ্ধতি হিসাবে বলা হয় ChildClass। আপনি যদি এই কোডটি কঠোর মোড বন্ধ করে চালানোর চেষ্টা করেন, আপনি দেখতে পাবেন " পিএইচপি মারাত্মক ত্রুটি: বিমূর্ত পদ্ধতিটি প্যারেন্টক্লাস :: বার () " কল করতে পারবেন না

এটি দেওয়া হয়েছে, পিএইচপি 5.2 এ বিমূর্ত স্থির পদ্ধতিগুলি অকেজো ছিল। সমগ্র বিন্দু এবং তারপর বিভিন্ন শিশু শ্রেণীর বিভিন্ন বাস্তবায়নের প্রদান - একটি বিমূর্ত পদ্ধতি ব্যবহার করে যে আপনি কোড যে বুদ্ধিমান কি বাস্তবায়ন এটি আহ্বান হতে যাচ্ছে ছাড়া মেথড কল করে লিখতে পারেন। তবে যেহেতু পিএইচপি 5.2 কোনও অভিভাবক শ্রেণীর এমন কোনও পদ্ধতি লেখার পক্ষে কোনও পরিষ্কার উপায় অফার করে না যা শিশু শ্রেণীর একটি স্ট্যাটিক পদ্ধতি বলে যার উপর এটি ডাকা হয়, তাই বিমূর্ত স্থির পদ্ধতির এই ব্যবহার সম্ভব নয়। সুতরাং abstract staticপিএইচপি 5.2 এর যে কোনও ব্যবহারই খারাপ কোড, সম্ভবত selfকীওয়ার্ডটি কীভাবে কাজ করে তার একটি ভুল বোঝাবুঝি দ্বারা অনুপ্রাণিত হয় । এটি সম্পর্কে একটি সতর্কতা নিক্ষেপ করা সম্পূর্ণ যুক্তিসঙ্গত ছিল।

কিন্তু তারপরে পিএইচপি 5.3 ক্লাসটির সাথে উল্লেখ করার সক্ষমতা যুক্ত করেছিল যার উপর staticকীওয়ার্ডের মাধ্যমে একটি পদ্ধতি আহ্বান করা হয়েছিল (কীওয়ার্ডের বিপরীতে self, যা সর্বদা ক্লাসকে বোঝায় যেখানে পদ্ধতিটি সংজ্ঞায়িত করা হয়েছিল )। আপনি যদি আমার উপরের উদাহরণে পরিবর্তন self::bar()করেন তবে static::bar()এটি পিএইচপি 5.3 এবং তার উপরের ক্ষেত্রে দুর্দান্ত কাজ করে। আপনি সম্বন্ধে আরও পড়তে পারেন selfবনাম staticনিউ স্ব বনাম নতুন স্ট্যাটিক

স্থির কীওয়ার্ড যুক্ত হওয়ার সাথে abstract staticএকটি সতর্কতা নিক্ষেপ করার স্পষ্ট যুক্তি চলে গেল। দেরীতে স্ট্যাটিক বাইন্ডিংয়ের মূল উদ্দেশ্যটি পিতামাতার শ্রেণিতে সংজ্ঞায়িত পদ্ধতিগুলিকে স্থির পদ্ধতিগুলি কল করতে অনুমতি দেওয়া ছিল যা শিশু শ্রেণিতে সংজ্ঞায়িত করা হত; বিমূর্ত স্ট্যাটিক পদ্ধতিগুলিকে মঞ্জুরি দেওয়া অস্তিত্বের দেরিতে স্থির বাইন্ডিংগুলি যুক্তিসঙ্গত এবং সামঞ্জস্যপূর্ণ বলে মনে হয়।

আমার ধারণা, আপনি এখনও সতর্কতা রাখার জন্য একটি মামলা করতে পারেন। উদাহরণস্বরূপ, আপনি তর্ক করতে পারেন যেহেতু পিএইচপি আপনাকে বিমূর্ত ক্লাসগুলির স্থির পদ্ধতিগুলি কল করতে দেয়, উপরের আমার উদাহরণে (এমনকি এটি প্রতিস্থাপনের selfমাধ্যমে এটি ঠিক করার পরেও static) আপনি একটি পাবলিক পদ্ধতি প্রকাশ করছেন ParentClass::foo()যা ভাঙা হয়েছে এবং আপনি সত্যই চান না প্রকাশ করা. একটি স্থিতিশীল শ্রেণি ব্যবহার না করে - যা সমস্ত পদ্ধতির উদাহরণ পদ্ধতি তৈরি করে এবং সকলের বাচ্চাকে ParentClassএকক বা কিছু হতে পারে - এই সমস্যাটি সমাধান করবে, যেহেতু ParentClass, বিমূর্ত হয়ে, তাত্ক্ষণিকভাবে কার্যকর করা যায় না এবং তাই এর উদাহরণ পদ্ধতিগুলি পারে না ডাকা হবে. আমি মনে করি এই যুক্তিটি দুর্বল (কারণ আমি প্রকাশ করি বলে মনে করিParentClass::foo() কোনও বড় বিষয় নয় এবং স্ট্যাটিক ক্লাসের পরিবর্তে সিঙ্গেলন ব্যবহার করা প্রায়শই অকারণে ভার্বোস এবং কুরুচিপূর্ণ) তবে আপনি যুক্তিযুক্তরূপে একমত হতে পারেন - এটি কিছুটা বিষয়বস্তু কল।

সুতরাং এই যুক্তির উপর ভিত্তি করে, পিএইচপি ডেভেলস ভাষাতে সতর্কতা রেখেছিল, তাই না?

ওহো, ঠিক

পিএইচপি বাগ রিপোর্ট 53081, উপরে লিঙ্কযুক্ত, সতর্কতাটি বাদ দেওয়ার জন্য বলা হয়েছে কারণ নির্মাণটি সংযোজন static::foo()বিমূর্ত স্ট্যাটিক পদ্ধতিগুলি যুক্তিসঙ্গত এবং দরকারী করেছে। রাসমাস লেয়ারডর্ফ (পিএইচপি-র স্রষ্টা) অনুরোধটিকে বোগাস হিসাবে লেবেল করে শুরু করে এবং সতর্কতাটিকে ন্যায়সঙ্গত করার চেষ্টা করার জন্য দীর্ঘ যুক্তিযুক্ত যুক্তির মধ্য দিয়ে যায়। তারপরে, অবশেষে, এই বিনিময়টি ঘটে:

জর্জিও

আমি জানি কিন্তু:

abstract class cA
{
      //static function A(){self::B();} error, undefined method
      static function A(){static::B();} // good
      abstract static function B();
}

class cB extends cA
{
    static function B(){echo "ok";}
}

cB::A();

Rasmus

ঠিক আছে, এটি ঠিক কাজ করা উচিত।

জর্জিও

তবে এটি অনুমোদিত নয় :(

Rasmus

কি অনুমতি নেই?

abstract class cA {
      static function A(){static::B();}
      abstract static function B();
}

class cB extends cA {
    static function B(){echo "ok";}
}

cB::A();

এটি কাজ করে। আপনি অবশ্যই স্ব :: বি () কল করতে পারবেন না, তবে স্থির :: বি () ভাল fine

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

এবং সেই কারণেই সতর্কতা এখনও ভাষাতেই রয়েছে in এটি পুরোপুরি সন্তোষজনক ব্যাখ্যা নাও হতে পারে - আপনি সম্ভবত এখানে এসে আশা করেছিলেন যে সতর্কতার যৌক্তিক ন্যায়সঙ্গততা রয়েছে। দুর্ভাগ্যক্রমে, আসল বিশ্বে, কখনও কখনও পছন্দগুলি যৌক্তিক সিদ্ধান্ত গ্রহণের পরিবর্তে জাগতিক ভুল এবং খারাপ যুক্তি থেকে জন্ম নেয়। এটি কেবল সেই সময়ের মধ্যে একটি।

ভাগ্যক্রমে, অনুমানযোগ্য নিকিতা পপভ পিএইচপি আরএফসির অংশ হিসাবে পিএইচপি 7 তে ভাষা থেকে এই সতর্কতাটি সরিয়ে দিয়েছেন : E_STRICT নোটিশগুলির পুনরায় শ্রেণিবদ্ধ করুন । শেষ পর্যন্ত, বিচক্ষণতা বিরাজ করছে এবং একবার পিএইচপি 7 প্রকাশিত হলে আমরা সকলেই abstract staticএই নির্বোধ সতর্কতা না পেয়ে আনন্দের সাথে ব্যবহার করতে পারি ।


70

এই ইস্যুটির জন্য খুব সাধারণ কাজ রয়েছে যা একটি ডিজাইনের দৃষ্টিকোণ থেকে বাস্তবে উপলব্ধি করে। যোনাথন যেমন লিখেছেন:

অবিচলিত পদ্ধতিগুলির সাথে কোনও শ্রেণি প্রসারিত করার ক্ষেত্রে একই। আপনি যদি সেই শ্রেণিটি প্রসারিত করেন এবং একই স্বাক্ষরের একটি স্ট্যাটিক পদ্ধতি তৈরি করেন, আপনি আসলে সুপারক্লাসের স্ট্যাটিক পদ্ধতিটিকে ওভাররাইড করছেন না

সুতরাং, আপনার চারপাশের কাজ হিসাবে এটি করতে পারেন:

<?php
abstract class MyFoo implements iMyFoo {

    public static final function factory($type, $someData) {
        // don't forget checking and do whatever else you would
        // like to do inside a factory method
        $class = get_called_class()."_".$type;
        $inst = $class::getInstance($someData);
        return $inst;
    }
}


interface iMyFoo {
    static function factory($type, $someData);
    static function getInstance();
    function getSomeData();
}
?>

এবং এখন আপনি প্রয়োগ করেছেন যে কোনও শ্রেণীর সাবক্লাসিং মাইফু একটি getInstance স্থির পদ্ধতি এবং একটি পাবলিক getSomeData পদ্ধতি প্রয়োগ করে। এবং আপনি যদি মাইফু সাবক্লাস না করেন তবে আপনি একই ধরণের কার্যকারিতা সহ একটি বর্গ তৈরি করতে iMyFoo প্রয়োগ করতে পারেন।


2
এই প্যাটার্ন দিয়ে কি কার্যটি সুরক্ষিত করা সম্ভব ? আমি যখন এটি করি তখন এর অর্থ ক্লাসগুলি মাইফু প্রসারিত সতর্কবার্তা দেয় যা getInstance অবশ্যই সর্বজনীন হতে পারে। এবং আপনি কোনও ইন্টারফেস সংজ্ঞাতে সুরক্ষিত রাখতে পারবেন না।
আর্টফুলবোট

3
কিছু সময় static::দরকারী হতে পারে।
13:58

3
বৈশিষ্ট্য নিয়ে কাজ করে না। abstract staticপিএইচপি বিচি ছাড়াই কেবল যদি ট্রেইটসের পদ্ধতি থাকতে পারে ....
রুডি

1
একটি ইন্টারফেস ব্যবহার সম্ভবত এখানে সেরা সমাধান। +1 টি।
হুয়ান কার্লোস কটো

নিছক সরলতার কারণে এটি আসলে খুব মার্জিত। +1
জি স্টিয়ার্ট

12

আমি জানি এটি পুরানো তবে ....

কেন কেবল একটি ব্যতিক্রমটিকে পিতামাত্ত শ্রেণীর স্থির পদ্ধতি হিসাবে ছুঁড়ে মারবেন না, যদি আপনি এটি ওভাররাইড না করেন তবে ব্যতিক্রম ঘটে।


1
এটি সাহায্য করে না, স্থির পদ্ধতির কল এ ব্যতিক্রম ঘটবে - একই সময়ে কোনও 'পদ্ধতি উপস্থিত নেই' ত্রুটি উঠে আসবে যদি আপনি এটিকে ওভাররাইড না করেন।
বিটি

3
@ বিটি-এর অর্থ ছিল, পদ্ধতিটিকে বিমূর্ত ঘোষণা করবেন না, এটি বাস্তবায়ন করুন, তবে যখন এটি ডাকা হবে তখন কেবল একটি ব্যতিক্রম ছুঁড়ে ফেলুন, যার অর্থ এটি যদি ওভাররাইড না হয়ে থাকে তবে তা নিক্ষেপ করবে না।
পেটাহ

এটি সবচেয়ে মার্জিত সমাধান বলে মনে হচ্ছে।
অ্যালেক্স এস

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

4

আমি যুক্তি দিয়ে বলব যে একটি বিমূর্ত শ্রেণি / ইন্টারফেস প্রোগ্রামারদের মধ্যে একটি চুক্তি হিসাবে দেখা যেতে পারে। এটি কীভাবে জিনিসগুলি দেখতে হবে / আচরণ করা উচিত এবং প্রকৃত কার্যকারিতা বাস্তবায়ন করে না সে সম্পর্কে আরও বেশি আলোচনা করে deals যেমন পিএইচপি 5.0 এবং 5.1.x এ দেখা যায় এটি কোনও প্রাকৃতিক আইন নয় যা পিএইচপি বিকাশকারীদের এটি করতে বাধা দেয় না, তবে অন্য ভাষায় অন্যান্য ওও ডিজাইনের ধরণগুলির সাথে চলার তাগিদ। মূলত এই ধারণাগুলি অপ্রত্যাশিত আচরণ প্রতিরোধ করার চেষ্টা করে, যদি অন্য ভাষাগুলির সাথে ইতিমধ্যে পরিচিত হয়।


: যদিও এখানে নেই এর সাথে সম্পর্কিত পিএইচপি আরেকটি ভাল ব্যাখ্যা stackoverflow.com/questions/3284/...
merkuro

3
আমার দেবতা! যে দুটি লোক আপনাকে নিম্নোক্ত করেছে, তারা সম্পূর্ণরূপে তাদের মনের বাইরে! এটি এই থ্রেডের সবচেয়ে অন্তর্দৃষ্টিপূর্ণ উত্তর।
থিওডোর আর স্মিথ

5
@ থিওডোরআর.স্মিত অন্তর্দৃষ্টিপূর্ণ? এটিতে ত্রুটি রয়েছে এবং সবে সুসংগত। বিমূর্ত শ্রেণিগুলি "প্রকৃত কার্যকারিতা বাস্তবায়ন করে না " দাবি করে এমন দাবি অগত্যা সত্য নয় এবং ইন্টারফেসের পাশাপাশি এটির পুরো বিষয়টিই এটি বিদ্যমান। এই দাবীতে যে "এটি কোনও প্রাকৃতিক আইন নয় যা পিএইচপি বিকাশকারীদের এটি করতে বাধা দেয়" , "এটি" কী তা আমার কোনও ধারণা নেই । এবং এই দাবিতে যে "মূলত এই ধারণাগুলি অপ্রত্যাশিত আচরণ রোধ করার চেষ্টা করে" , "এই ধারণাগুলি" বা সম্ভাব্য "অপ্রত্যাশিত আচরণ" কী তা আমার কোনও ধারণা নেই। আপনি এ থেকে যতটুকু অন্তর্দৃষ্টি পেয়েছেন তা আমার কাছে হারিয়েছে।
মার্ক আমেরিকা

2

স্থির বিমূর্ত ফাংশন নিষিদ্ধ করার কোনও কারণ আমি দেখতে পাচ্ছি না। এগুলি নিষিদ্ধ করার কোনও কারণ নেই বলে সবচেয়ে ভাল যুক্তিটি হ'ল এগুলি জাভাতে অনুমোদিত। প্রশ্নগুলি হল: - প্রযুক্তিগতভাবে সম্ভব? - হ্যাঁ, যেহেতু পিএইচপি 5.2 তে বিদ্যমান ছিল এবং এগুলি জাভাতে রয়েছে। সুতরাং যেখানে এটি করতে পারেন। আমরা কি এটা করব? - তারা কি বোঝায়? হ্যাঁ. এটি একটি শ্রেণীর একটি অংশ বাস্তবায়ন এবং ক্লাসের অন্য অংশটি ব্যবহারকারীর কাছে রেখে দেওয়া বোধগম্য। এটি অ স্থির ফাংশনগুলিতে অর্থবোধ করে, স্থির ক্রিয়াকলাপগুলির জন্য কেন এটি বোঝা উচিত নয়? স্ট্যাটিক ফাংশনগুলির একটি ব্যবহার এমন শ্রেণি যেখানে একাধিক উদাহরণ থাকতে হবে না (সিলেটলেট)। উদাহরণস্বরূপ একটি এনক্রিপশন ইঞ্জিন। এটি বেশ কয়েকটি দৃষ্টান্তে উপস্থিত থাকার প্রয়োজন নেই এবং এটি প্রতিরোধের কারণগুলি রয়েছে - উদাহরণস্বরূপ, আপনাকে অনুপ্রবেশকারীদের বিরুদ্ধে স্মৃতির কেবল একটি অংশ রক্ষা করতে হবে। সুতরাং ইঞ্জিনের একটি অংশ বাস্তবায়িত করতে এবং এনক্রিপশন অ্যালগরিদমটি ব্যবহারকারীর কাছে রেখে দেওয়ার জন্য এটি সঠিক ধারণা দেয়। এই শুধুমাত্র একটি উদাহরণ। আপনি যদি স্ট্যাটিক ফাংশন ব্যবহার করতে অভ্যস্ত হন তবে আপনি আরও অনেক কিছু পাবেন।


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

0

পিএইচপি 5.4+ বৈশিষ্ট্য ব্যবহার করুন:

trait StaticExample {
    public static function instance () {
    return new self;
    }
}

এবং আপনার ক্লাসে ভিক্ষা শুরু করুন:

use StaticExample;

1
আমি abstract public static function get_table_name();একটি বৈশিষ্ট্য তৈরি করতে সক্ষম হয়েছিল এবং আমার বিমূর্ত শ্রেণীর মধ্যে সেই বৈশিষ্ট্যটি আর E_STRICT সতর্কতা না দিয়ে ব্যবহার করতে সক্ষম হয়েছিল ! এটি এখনও প্রত্যাশা মতো বাচ্চাদের মধ্যে স্থির পদ্ধতির সংজ্ঞা প্রয়োগ করা কার্যকর করেছে। ফ্যান্টাস্টিক!
প্রোগ্রামার

-1

পিএইচপি'র 'লেট স্ট্যাটিক বন্ডিং' বিষয়গুলি দেখুন। আপনি যদি বিমূর্ত ক্লাসগুলিতে স্থিতিশীল পদ্ধতি রাখছেন তবে আপনি সম্ভবত এটির পরিবর্তে খুব শীঘ্রই এটি চালাচ্ছেন। এটি বোঝা যায় যে কঠোর সতর্কতাগুলি আপনাকে ভাঙা ভাষার বৈশিষ্ট্যগুলি ব্যবহার এড়াতে বলছে।


4
আমি মনে করি তার অর্থ "কঠোর মানদণ্ড" সতর্কতা।
জ্যাকব হিউম

2
দেরী স্থির বাইন্ডিংগুলি কী দাবি করে আপনি "কোন সমস্যা"? আপনি দৃ as়ভাবে দাবি করেন যে এগুলি "ভাঙ্গা", যা একটি সাহসী দাবি, প্রমাণ বা ব্যাখ্যা ছাড়াই এখানে তৈরি করা হয়েছে। বৈশিষ্ট্যটি সর্বদা আমার পক্ষে ভাল কাজ করেছে এবং আমি মনে করি এই পোস্টটি বাজে।
মার্ক আমেরিকা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.