পিএসআর -0 এবং পিএসআর -4 এর মধ্যে পার্থক্যগুলি কী কী?


225

সম্প্রতি আমি নেমস্পেসগুলি এবং সেগুলি কীভাবে উপকারী তা সম্পর্কে পড়েছি। আমি বর্তমানে লারাভেলে একটি প্রকল্প তৈরি করছি এবং শ্রেণি মানচিত্র থেকে অটোলয়েড থেকে নেমস্পেসিংয়ে যাওয়ার চেষ্টা করছি। তবে, পিএসআর -0 এবং পিএসআর -4 এর মধ্যে প্রকৃত পার্থক্য কী তা আমি বুঝতে পারি না।

আমি যে কিছু সংস্থান পড়েছি তা হ'ল ...

আমি যা বুঝি:

  • পিএসআর -4 আন্ডারস্কোরগুলি ডিরেক্টরি বিভাজকগুলিতে রূপান্তর করে না
  • সুরকারের নির্দিষ্ট কিছু নির্দিষ্ট নিয়মাবলী ডিরেক্টরি কাঠামোকে জটিল করে তোলে যার ফলে পিএসআর -0 নাম বর্ণনাকে ভার্জোজ করে তোলে এবং এইভাবে পিএসআর -4 তৈরি করা হয়েছিল

পার্থক্য ব্যাখ্যা উদাহরণগুলি প্রশংসা করা হবে।


3
PSR0 এবং PSR4 পড়ুন । তারা প্রতিটি একক বিস্তারিত ব্যাখ্যা।
সেভেরি এম। ওলসেন


4
☝️ কারও উত্তর হিসাবে এটির সংক্ষেপটি টাইপ করা উচিত ... :)
প্রতারণা

1
আইএমও, পিএসআর-এর বেশিরভাগ অংশই এমন হয় যা তারা ঠিক কী পছন্দ করে না ...
ইউশা আলেয়ুব

উত্তর:


283

এগুলি খুব অনুরূপ তাই এটি আশ্চর্যজনক নয় যে এটি কিছুটা বিভ্রান্তিকর। সংক্ষিপ্তসারটি হ'ল পিএসআর -0 এর পিয়ার-স্টাইলের ক্লাসনেমগুলির জন্য কিছু পিছনের সামঞ্জস্য বৈশিষ্ট্য ছিল যা পিএসআর -4 বাদ পড়েছিল, যেমন এটি কেবল নামস্পেস কোডকে সমর্থন করে। পিএসআর -4 এর উপরে আপনাকে ডিরেক্টরি কাঠামো হিসাবে পুরো নেমস্পেসটি বাধ্য করতে বাধ্য করে না, তবে অ্যাঙ্কর পয়েন্টের পরে কেবল অংশটিই।

উদাহরণস্বরূপ, যদি আপনি সংজ্ঞায়িত যে Acme\Foo\নামস্থান নোঙর তোলেনি src/, PSR-0 সঙ্গে এটা মানে এটা প্রত্যাশা করা হবে Acme\Foo\Barsrc/Acme/Foo/Bar.phpসময় PSR-4 এটা এটা জন্য চেহারা হবে src/Bar.php, খাটো ডিরেক্টরি স্ট্রাকচার জন্য অনুমতি। অন্যদিকে কিছু পূর্ণ ডিরেক্টরির কাঠামো পরিষ্কারভাবে তা দেখতে যা নামস্থান হয়, তোমরাও তেমনি বলতে পারেন আছে পছন্দ Acme\Foo\হয় src/Acme/Fooসঙ্গে PSR-4 যা হবে তোমাদের PSR-0 আচরণ সমতুল্য দেয় উপরে বর্ণিত।

নতুন প্রকল্পগুলির জন্য এবং বেশিরভাগ উদ্দেশ্য এবং উদ্দেশ্যগুলির জন্য দীর্ঘ গল্প সংক্ষিপ্ত, আপনি PSR-4 ব্যবহার করতে পারেন এবং PSR-0 সম্পর্কে সব ভুলে যেতে পারেন।


17
src/Bar.phpআপনি যদি বলেন এটি পিক করেAcme\Foo\ => src/
সেলডাক

ব্যাখ্যার জন্য আপনাকে অনেক ধন্যবাদ!
尤川豪

4
পিএসআর -4 পিএসআর -0 এর চেয়ে ধীর, তাইনা?
এনগুইন লিনহ

2
পুনঃটুইট এটি একই জিনিসটি করে তবে সম্ভবত কয়েকটি স্তরের ডিরেক্টরি সহ এটি সম্ভবত কিছুটা দ্রুত হতে পারে। এটা মাপো. আপনি একটি প্যাকেজ তৈরি করতে পারেন যা আপনি পিএসআর -0 এবং পিএসআর -4 এর মধ্যে স্যুইচ করতে পারেন - আমি মনে করি না আপনি কোনও পার্থক্য দেখতে পাবেন।
সোভেন

44

এখানে প্রধান পার্থক্য রয়েছে,

১. উদাহরণস্বরূপ আপনি যদি সংজ্ঞা দেন যে Acme\Foo\নামস্থানটি অ্যাঙ্করড রয়েছে src/,

  • PSR-0 সঙ্গে এটা মানে এটা প্রত্যাশা করা হবে Acme\Foo\Barsrc/Acme/Foo/Bar.php
  • যখন PSR-4 এটা জন্য চেহারা হবে Acme\Foo\Barমধ্যে src/Bar.php(where Bar class is)

2. পিএসআর -4 আন্ডারস্কোরগুলিকে ডিরেক্টরি বিভাজকগুলিতে রূপান্তর করে না

৩. আপনি নেমস্পেসের সাথে পিএসআর -4 ব্যবহার করতে পছন্দ করবেন

৪. PSR-0 ক্লাসের নাম ফাইলের নাম থেকে পৃথক হলেও উদাহরণ হিসাবে কাজ করবে না যেমন উপরের উদাহরণ বিবেচনা করে:

  • Acme\Foo\Bar ---> src/Acme/Foo/Bar.php (বার শ্রেণির জন্য) কাজ করবে
  • Acme\Foo\Bar ---> src/Acme/Foo/Bar2.php(বার শ্রেণির জন্য) কাজ করবে না

1
আপনি অবশ্যই কোনও নেমস্পেস স্ক্রিপ্টগুলির সাথে পিএসআর -4 ব্যবহার করতে পারেন, এ জাতীয় কোনও বিধিনিষেধ নেই এবং আমি এটি ব্যবহার করি (আমার পছন্দ নয়)
গালভানি

আপনার 1. এ (প্রথম পয়েন্ট) পিএসআর -4 ক্ষেত্রে বারটি কোথা থেকে এসেছে?
সিজমিলিং

31

পিএসআর -4 হ'ল 'আপেক্ষিক পথ', পিএসআর -0, 'পরম পথ' এর মতো কিছু।

যেমন

কনফিগ:

'App\Controller' => 'dir/'

পিএসআর -0 অটোলোড:

App\Controller\IndexController --> dir/App/Controller/IndexController.php

পিএসআর -4 অটোলোড:

App\Controller\IndexController --> dir/IndexController.php

এবং পিএসআর -0 এবং পিএসআর -4 এর মধ্যে বিশদে আরও কিছু পার্থক্য রয়েছে, এখানে দেখুন: http://www.php-fig.org/psr/psr-4/


10

নেমস্পেস / ফোল্ডার কনভেনশন।

ক্লাসগুলি তাদের নামের স্থান অনুসারে ফোল্ডারে সংরক্ষণ করতে হবে।

সাধারণভাবে, আপনি আপনার মূল ফোল্ডারে একটি src / ডিরেক্টরি তৈরি করবেন, বিক্রেতার / হিসাবে একই স্তরে বসে এবং সেখানে আপনার প্রকল্পগুলি যুক্ত করবেন। নীচে ফোল্ডার কাঠামোর একটি উদাহরণ দেওয়া হল:

.
+-- src
    |
    +-- Book 
    |   +-- History
    |   |   +-- UnitedStates.php - namespace Book\History;
    +-- Vehicle
    |   +-- Air
    |   |   +-- Wings
    |   |   |   +-- Airplane.php - namespace Vehicle\Air\Wings;
    |   +-- Road
    |   |   +-- Car.php - namespace Vehicle\Road;
+-- tests
    +-- test.php
+-- vendor

পিএসআর -0 এবং পিএসআর -4 এর মধ্যে পার্থক্য

PSR-0

এটি হ্রাস করা হয়। দিকে তাকাওvendor/composer/autoload_namespaces.phpফাইলটির আপনি নাম স্থান এবং সেগুলি ম্যাপ করা ডিরেক্টরিগুলি দেখতে পাবেন।

composer.json

"autoload": {
        "psr-0": {
            "Book\\": "src/",
            "Vehicle\\": "src/"
        }
} 
  • এসসিআর / বুকে বই \ ইতিহাস \ ইউনাইটেড স্টেটস খুঁজছেন /History/UnitedStates.php
  • জন্যে যানবাহন এ \ এয়ার \ উইংস \ উড়োজাহাজ src / যানবাহন /Air/Wings/Airplane.php

PSR-4

দিকে তাকাও vendor/composer/autoload_psr4.phpফাইলটির আপনি নাম স্থান এবং সেগুলি ম্যাপ করা ডিরেক্টরিগুলি দেখতে পাবেন।

composer.json

"autoload": {
    "psr-4": {
        "Book\\": "src/",
        "Vehicle\\": "src/"
    }
}   
  • জন্যে বুক এ \ ইতিহাস \ UnitedStates src /History/UnitedStates.php
  • জন্যে যানবাহন এ \ এয়ার \ উইংস \ উড়োজাহাজ src /Air/Wings/Airplane.php

composer.json

"autoload": {
    "psr-4": {
        "Book\\": "src/Book/",
        "Vehicle\\": "src/Vehicle/"
    }
}    
  • বইয়ের জন্য অনুসন্ধান \ ইতিহাস \ ইউনাইটেড স্টেটস src / Book /History/UnitedStates.php
  • জন্যে যানবাহন এ \ এয়ার \ উইংস \ উড়োজাহাজ src / যানবাহন /Air/Wings/Airplane.php

-4

এমনকি আমি চেষ্টা করেছি কিন্তু সুরকার একটি জগাখিচুড়ি। দুঃখের বিষয়, এটি বাজারের একমাত্র বিকল্প।
গোলযোগ কেন ?.
আপনি কোডের নিয়ন্ত্রণে থাকলে সুরকারের স্বতঃপূরণ সূক্ষ্মভাবে কাজ করে। তবে, আপনি যদি অন্য কোনও প্রকল্প আমদানি করে থাকেন তবে আপনি নিজেকে প্রচুর শৈলী এবং ফোল্ডার তৈরির উপায়গুলি সহ সন্ধান করেন। উদাহরণস্বরূপ, কিছু প্রকল্পগুলি হ'ল /company/src/class.php এবং অন্যগুলি সংস্থা / Class.php এবং অন্যগুলি সংস্থার / src / শ্রেণী / class.php

আমি একটি লাইব্রেরি তৈরি করেছি যা এটি সমাধান করে:

https://github.com/EFTEC/AutoLoadOne (এটি নিখরচায়, এমআইটি)।

এটি একটি ফোল্ডারের সমস্ত ক্লাস স্ক্যান করে একটি স্বতঃসূচনা তৈরি করে, তাই এটি প্রতিটি ক্ষেত্রে কাজ করে (psr-0 psr-4, নামস্থান ছাড়াই ক্লাস, একাধিক ক্লাস সহ ফাইল ..)

সম্পাদনা করুন: এবং আবার কোনও কারণ ছাড়াই নিম্নচাপিত। ;-)


Composer.json এ ক্লাসম্যাপ বিকল্প সম্পর্কে পড়ুন। getcomposer.org/doc/04-schema.md#classmap - আপনার উত্তরকে নিম্নচোট করার কারণ হতে পারে।
প্যাট্রিক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.