Ukieweb

Diary

I write here what I learn

PHP কোডিং স্টাইল গাইড ও অটোলোডিং

PHP কোডিং স্টাইল গাইড ও অটোলোডিং

একজন ভালো ডেভলপার মানে শুধু এটা নয় যে আপনি একটি প্রোবলেম পেলেন আর তার সমাধান দিয়ে দিলেন। হ্যা এতে হয়তো সাময়িক সমাধান পাবেন কিন্তু দীর্ঘ মেয়াদী চিন্তা করলে এর ফলাফল খারাপ। তার মানে কি, আপনি প্রোবলেম সলভ করবেন না? হ্যা অবশ্যই করবেন, আপনার কাজই তো প্রোবলেম সলভ করা। কিন্তু সেটাই যদি একটু পরিপাটি বা গুছিয়ে করেন তবে অদূরভবিষ্যতে এর ফলাফল মিষ্টি হবে। পোষাকের দোকানে গেলে দেখবেন পুরুষের ও মহিলাদের পোষাক আলাদা আলাদা সেকশনে রাখা। আবার পুরুষের সেকশনে গিয়ে দেখবেন সেখানেও পোষাকের ধরন অনুযায়ী আবার আলাদা সেকশন করা আছে, যেমনঃ ক্যাজুয়াল শার্ট ও ফরমাল শার্ট আলাদা করা আছে। জিন্স ও ফরমাল প্যান্টও আলাদা করা আবার টিশার্ট ও পোলোটিশার্ট ভিন্ন জায়গায় রাখা। এর পরে কিন্তু দেখবেন এগুলোর সাইজ অনুযায়ী পোষাক আবার ভিন্ন ভিন্ন র্যাকে রাখা আছে। কিন্তু কেন এতো ভেরিয়েশন। সব কিছু তো এক জায়গায় রেখে দিলেই চলতো। এই ঝামেলা করার মানেটা কি? হুম আপনি হয়তো এর ফলাফল সাময়িক সময়ে বুঝতে পারবেন না কিন্তু সময়টা গড়িয়ে কিছুদিন গেলেই দেখবেন এই কাজটির জন্যই আপনার দিনের কতোগুলো সময় বেচে যাচ্ছে। কাষ্টমার আপনার কাছে এসে ৩৪ সাইজের জিন্স চাইলেই আপনি চোখ বন্ধ করে তাকে দেখাতে পারবেন। আপনাকে দ্বিতীয়বার চিন্তা করতে হবে না ৩৪ সাইজের জিন্স কোথায় রয়েছে। এর মানে কি দাড়ালো গুছানো কাজ আপনার দৈনন্দিন জীবনের কতগুলো সময় বাচিয়ে দিচ্ছে। সবকিছু ম্যানেজ করতে আপনার শ্রম কতটা কম লাগছে তার থেকেও বড় কথা আপনি যদি এখন দোকানে নতুন কর্মী নেন তাকেও আপনার দোকানের পোষাকের অবস্থান সম্পর্কে ধারনা দেয়া অনেক সহজ হয়ে যাবে।

ঠিক তেমনি PHP দিয়ে যখন একটি প্রোজেক্ট তৈরী করবেন সেটি যদি একটু গুছিয়ে করেন, একটু যদি ভেরিয়েবলগুলোর অর্থপূর্ন নাম দেন, যদি ফাইলগুলোকে তাদের কাজের ধরন অনুযায়ী আলাদা করে রাখেন এবং যদি সবকিছুতে একটি নির্দিষ্ট কনভেনশন ফলো করেন তবে সেটি সেটি পরবর্তীতে আপনারই বুঝতে অনেক সহজ হবে এমনকি টিম ভিত্তিক কাজে প্রত্যেকটা টিম মেম্বার যদি একই কনভেনশন ফলো করে তবে সবাই সবার কোড খুব সহজেই আয়ত্ব করতে পারবে। সব থেকে বড় কথা আপনি যখন বড় কোনো ওপেনসোর্স প্রোজেক্টে কাজ করবেন তখন যদি আপনার কোডে ইন্টারন্যাশনাল মান থাকে তবে অন্যান্যদের আপনার প্রোজেক্টে কন্ট্রিবিউশন করতে কোনো বেগ পোহাতে হবে না। মোটকথা আপনার কোডে একটি ছান্দিক ভাব চলে আসবে, সমগ্র কোড থাকবে নান্দনিকতায় পরিপূর্ন। আর এর জন্যই বিশ্বের বড় বড় প্রতিষ্ঠানের নামকরা সব প্রোগ্রামার’রা মিলে তাদের দীর্ঘদিনের অভিগ্যতা ও প্রতিবন্ধকতার উপর ভিত্তি করে একটা স্টান্ডার্ড তৈরী করেছেন যাকে তারা নাম দিয়েছেন PHP Standards Recommendations(PSR) এবং তারা মিলে একটি গ্রুপ তৈরী করেছেন PHP Framework Interop Group(PHP-FIG) নামে, যারা এই স্টান্ডার্ডগুলোকে মেনটেইন করে ও উন্নতকরন করে। আর বর্তমান সময়ে সর্বাধিক ব্যবহৃত Coding Standard হলো PSR-2 এবং File autoload standard হলো PSR-4. তাহলে চলুন আজকে এ দুটি বিষয়ের উপর একটু জেনে নেই।

PSR-2 Coding Style Guide

PSR-2 হলো PSR-1 এর এক্সটেন্ডেড ভার্সন অর্থৎ এটি PSR-1 কে বর্ধিত করে করা হয়েছে। এদুটোই হলো Coding Style Guide অর্থাৎ আপনি কোডে class, method, funciton কিংবা variable কিভাবে লিখবেন সেটাই বলা হয়েছে এই গাইডে।

১. অবশ্যই PHP’র ফাইলে কোড শুধু মাত্র <?php অথবা <?= দিয়ে শুরু হবে। ২. অবশ্যই ফাইলের ক্যারেক্টার এনকোডিং থাকবে UTF-8 ৩. Namespace ও Class হবে ডিরেক্টরী ও ফাইলের নাম অনুসারে। যেমনঃ যদি আপনার class হয় app/services/PhotoService.php তাহলে এর namespace হবে

namespace App\Services;

আর class হবে


class PhotoService
{

}

এবং use ব্লকের পরে অবশ্যই একটি ফাকা লাইন থাকবে।

৪. Class এর নাম অবশ্যই হবে StudlyCaps অর্থাৎ শব্দের প্রথম অক্ষরটি capital হবে। যেমনঃ PhotoUploadController এবং class এর ফাইল নাম হবে PhotoUploadController.php ৫. Class এর opening ব্রাকেট অবশ্যই দ্বিতীয় লাইন থেকে শুরু হবে এবং শেষ হবে বডি কন্টেন্টের শেষে পরের লাইনে। যেমনঃ

এমনটা হবে না

class ClassName{
    protected $name; }

এরকম হবে

class ClassName
{
    $protected $name;
}

৬. Class এর constant গুলো অবশ্যই upppercase হবে ও ওয়ার্ডের সেপারেশন হবে Underscore(_) দিয়ে। যেমনঃ const MINIMUM_AGE; ৭. Method ও Function এর নাম অবশ্যই camelCase হবে, যেমনঃ 


function getAllUsers()
{

}

৮. Method ও Function এর opening ব্রাকেট অবশ্যই দ্বিতীয় লাইন থেকে শুরু হবে এবং শেষ হবে বডি কন্টেন্টের শেষে পরের লাইনে। যেমনঃ

এমনটা হবে না

function functionName(){
    return $name; }

এরকম হবে

function functionName()
{
    return $name;
}

এরকম আরো বেশ কিছু রুলস আছে যা আপনাকে ফলো করা দরকার। PSR-২ এর বিস্তারিত পাবেন এখানে

PSR-4 Autoloading

PHP-FIG ফাইল অটোলোডিং এর উপরও বেশ কিছু রুলস দিয়ে দিয়েছে। যা এখন আধুনিক সকল ফ্রেমওয়ার্কগুলো ব্যবহার করছে। এখানে মূলত ডিরেক্টরীর নাম কেমন হবে, ফাইলের নাম কেমন হবে এবং ফাইল অটোলোডিং এর জন্য কোথায় ফাইল রাখতে হবে এগুলো সম্পর্কে বলা হয়েছে। তাহলে কিছু রুলস দেখে নেইঃ

১. একটি পূর্ন কোয়ালিফাই namespace দেখতে এরকম হব

\<NamespaceName>(\<SubNamespaceNames>)*\<ClassName>

২. একটি পূ্র্ন কোয়ালিফাই class এর নামের সাথে একটি Top Level Namespace অবশ্যই থাকবে যা ঐ class এর vendor কে রিপ্রেসেন্ট করে। ৩. একটি পূ্র্ন কোয়ালিফাই namespace অবশ্যই class name দিয়ে শেষ হবে,

use VendorName\ClassName;

৪. Namespace এর sub-namespace class এর sub-directory কে রিপ্রেসেন্ট করবে। ৫. Class এর ফাইলের নাম class এর নামের অনুরূপ হবে।

এরককম আরো অনেক autoloading রুলস রয়েছে। বিস্তারিত এখানে পাবেন।

যাইহোক আমি এখানে চেষ্টা করেছি PSR-2 ও PSR-4 এর পার্থক্য টা বোঝাতে ও কিভাবে এগুলো সম্পর্কে শেখা শুরু করবেন তা জানাতে। দেখা গেছে অনেকে হয়তোবা না জেনেই এই রকমের কোড করতেন কিন্তু এখন একটু জানলেন আরকি।

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

আশা করি লেখাটা উপকারে আসবে, ভালো থাকবেন সবাই

ধন্যবাদ :)

9 Comments

28/09/2016

Great article. I had confusion with PSR and PHP-FIG in general. Thanks

28/09/2016

ধন্যবাদ ভাই :)

30/09/2016

খুবই ভাল লিখছেন ভাই ।

01/10/2016

ধন্যবাদ ভাই @Hasib

08/10/2016

নাহিদ ভাই, আমি লারাভেলে কাজ শিখতেছি । কোন ফাইল সেইভ করার ক্ষেত্রে কেন নিয়ম ব্যাবহার করব ?

UpperCase.php ? camelCase.php ? under_score.php ?

আপনার কমেন্টের অপেক্ষায় রইলাম ভাই ।

08/10/2016

ক্লাস ফাইলে হবে ক্লাসের নামের অনুসারে, যেমনঃ যদি ক্লাসের নাম হয়


class UserInfo
{

}

তাহলে ফাইলের নাম হবে UserInfo.php

আর বাকি ক্ষেত্রে হয় underscore অথবা camelCase ব্যবহার করতবে পারেন।

16/10/2016

ধন্যবাদ নাহিদ ভাই :)

30/10/2016

ধন্যবাদ অনেক কিছু জানলাম ।

30/10/2016

Welcome @Husain vai and @Hasib vai

To make a comment you have to login