در حال بارگزاری ...

استفاده از لودینگ خودکار برای سازماندهی کدهای PHP

php
توسط سميه شفيعي
آخرین به روز رسانی شنبه 16 آذر 1398

در این قسمت از آموزش در لیداوب به یادگیری لودینگ خودکار برای سازماندهی کدهای php می‌پردازیم. با ما همراه باشید.

 لودینگ خودکار برای سازماندهی کدهای php

 Autoloading به ما کمک می‌کند تا کدهای خود را با روشی درست سازمان دهی کنیم. این امر باعث می‌شود درک اینکه چگونه همه قطعات در کنار هم قرار می‌گیرند، آسان‌تر شود. 

با معرفی Composer به انجمن PHP، اکنون راهی داریم که مانند گذشته، سازماندهی کدهای خود را کنترل کنیم. همانطور که می‌دانیم، Composer مدیر وابستگی‌های زبان PHP است. علاوه بر مدیریت وابستگی‌ها، Composer همچنین autoloading کارآمد را نیز برای ما فراهم می‌کند. در ادامه این آموزش در لیداوب، ما استفاده از autoloading را مورد بررسی قرار خواهیم داد.

در این مقاله ما مجموعه‌ای از کلاس‌ها را  ایجاد کردیم تا به ما در پیروزی در مسابقات جهانی FIFA Soccer کمک کنند. ما یک کشور ( Country.php )، تعدادی بازیکن ( Player.php )، یک تیم ( Team.php ) و بسیاری از متدها و خصوصیات پشتیبانی را برای تحقق هدف خود داریم.یعنی یک فایل بزرگ PHP  نیز داریم که به صورت زیر خواهد بود.

  • Class 1
  • Class 2
  • Class 3
  • Client code / Implementation of classes.

این برای برنامه‌های یادگیری و آموزش استایل مناسب است. ما می‌توانیم خیلی سریع همه‌ اتفاقاتی را که در یک فایل PHP ساده رخ می‌دهد را مشاهده کنیم. با این حال اگر می‌خواهید یک برنامه بزرگتر ایجاد کنید، این رویکرد زیاد موفق عمل نمی‌کند. شاید شما باید ده یا پانزده کلاس برای حساب کاربری داشته باشید و بسیاری از خطوط کد در کلاینت شما برای اجرای آن وجود داشته باشد، یک فایل PHP در این حالت قصد حذف آن را ندارد. این قرارداد در واقع برای ایجاد یک کلاس در هر فایل PHP است. زیرا کلاینت شما می‌تواند کلاس‌های مورد نیاز را شامل شود یا برای استفاده آن‌ها راautoload کند. 

دایرکتوری /root 

ما می‌توانیم با دایرکتوری root شروع کنیم. در این دایرکتوری، ما علاوه بر یک دایرکتوری source که کلاس‌های ما را نگه می‌دارد، کد کلاینت خود را در فایل index.php   خواهیم داشت. در داخل دایرکتوری source، سه فایل زیر وجود دارد:

./root/source/Country.php

<?php



class Country

{

    protected $team;

    protected $name;



    public function __construct(Team $team, $name = 'USA')

    {

        $this->team = $team;

        $this->name = $name;

    }



    public function recruit(Player $player)

    {

        $this->team->join($player);

    }



}

/root/source/Player.php

<?php



class Player

{

    protected $name;



    public function __construct($name)

    {

        $this->name = $name;

    }

}

/root/source/Team.php

<?php



class Team

{

    protected $players = [];



    public function __construct($players = [])

    {

        $this->players = $players;

    }



    public function join(Player $player)

    {

        $this->players[] = $player;

    }



    public function getplayers()

    {

        return $this->players;

    }

}

/root/index.php

در دایرکتوری root، همچنین کد کلاینت خود را داریم که به این شکل نمایش داده می‌شود.

<?php



$team = new Team;



$usa = new Country($team);



$player1 = new Player('Carli Lloyd');



$usa->recruit($player1);



$player2 = new Player('Morgan Brian');

$player3 = new Player('Ashlyn Harris');

$player4 = new Player('Tobin Heath');

$player5 = new Player('Alex Morgan');



$usa->recruit($player2);

$usa->recruit($player3);

$usa->recruit($player4);

$usa->recruit($player5);





echo '<pre>';

print_r($team->getplayers());

وقتی سعی کنیم که برنامه خود را اجرا کنیم، خطای زیر نمایش داده خواهد شد:

Fatal error: Class ‘Team’ not found in C:\wamp\www\root\index.php on line 3

include فایل های کلاس مورد نیاز

ما فقط به include کردن فایل‌های کلاس مورد نیاز مانند زیر نیاز داریم:

include('source/Country.php');

include('source/Player.php');

include('source/Team.php');



$team = new Team;



$usa = new Country($team);



$player1 = new Player('Carli Lloyd');



$usa->recruit($player1);



$player2 = new Player('Morgan Brian');

$player3 = new Player('Ashlyn Harris');

$player4 = new Player('Tobin Heath');

$player5 = new Player('Alex Morgan');



$usa->recruit($player2);

$usa->recruit($player3);

$usa->recruit($player4);

$usa->recruit($player5);





echo '<pre>';

print_r($team->getplayers());

هنگامی که ما کد بالا را اجرا کردیم، همه چیز خوب کار می‌کند.

لودینگ خودکار برای سازماندهی کد

با این حال روش بهتری نیز وجود دارد و این به این معنی است که می‌توانید از Autoloading با Composer استفاده کنید. مقادیر دستی شامل فایل‌ها نخواهند بود و منجر به ایجاد مشکل در خط می‌شوند. بیایید ببینیم چگونه این مورد را می‌توان با Composer حل کرد.

Autoload با Composer

از اینجا به بعد، فرض خواهیم کرد که Composer را قبلاً نصب کرده‌ایم. اگر این کار را نکردید، قبل از ادامه کار باید  Composer را نصب کنید. با نصب Composer، ما می‌توانیم با استفاده از ترمینال به root پروژه خود برویم. در مورد ما ترمینال C: \\ wamp \\ www \\ root\u003e است، اگر قبلاً از Composer استفاده نکرده‌اید، به راحتی Composer را تایپ کنید تا ببینید چه چیزی در دسترس ما قرار می‌گیرد.

C:\wamp\www\root>composer

   ______

  / ____/___  ____ ___  ____  ____  ________  _____

 / /   / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/

/ /___/ /_/ / / / / / / /_/ / /_/ (__  )  __/ /

\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/

                    /_/

Composer version 1.0-dev (39e6f51bef3a4b148d9f35a0ae7a082e9aed97f4) 2015-07-09 11:04:41



Usage:

 command [options] [arguments]



Options:

 --help (-h)           Display this help message

 --quiet (-q)          Do not output any message

 --verbose (-v|vv|vvv) Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug

 --version (-V)        Display this application version

 --ansi                Force ANSI output

 --no-ansi             Disable ANSI output

 --no-interaction (-n) Do not ask any interactive question

 --profile             Display timing and memory usage information

 --working-dir (-d)    If specified, use the given directory as working directory.



Available commands:

 about            Short information about Composer

 archive          Create an archive of this composer package

 browse           Opens the package's repository URL or homepage in your browser.

 clear-cache      Clears composer's internal package cache.

 clearcache       Clears composer's internal package cache.

 config           Set config options

 create-project   Create new project from a package into given directory.

 depends          Shows which packages depend on the given package

 diagnose         Diagnoses the system to identify common errors.

 dump-autoload    Dumps the autoloader

 dumpautoload     Dumps the autoloader

 global           Allows running commands in the global composer dir ($COMPOSER_HOME).

 help             Displays help for a command

 home             Opens the package's repository URL or homepage in your browser.

 info             Show information about packages

 init             Creates a basic composer.json file in current directory.

 install          Installs the project dependencies from the composer.lock file if present, or falls back on the composer.json.

 licenses         Show information about licenses of dependencies

 list             Lists commands

 remove           Removes a package from the require or require-dev

 require          Adds required packages to your composer.json and installs them

 run-script       Run the scripts defined in composer.json.

 search           Search for packages

 self-update      Updates composer.phar to the latest version.

 selfupdate       Updates composer.phar to the latest version.

 show             Show information about packages

 status           Show a list of locally modified packages

 suggests         Show package suggestions

 update           Updates your dependencies to the latest version according to composer.json, and updates the composer.lock file.

 validate         Validates a composer.json

ما قبل از هر چیز دیگری به یک composer.json    احتیاج داریم، بنابراین دستور init  برای ما خوب به نظر می‌رسد. این دستور شما را با استفاده از یک فایل composer.json، فرایند ایجاد یک پروژه را به شما منتقل می‌کند. در این آموزش، چیزهای زیادی را که نیازی به آن ندارید ایجاد می‌کند. بنابراین پس از اینکه composer.json خود را دریافت کردید، آن را به سادگی ویرایش کنید تا فقط یک فایل خالی داشته باشید که حاوی کارکتر‌های {and} باشد، سپس composer install   را اجرا کنید که فایل autoload.php    مورد نیاز شما را تولید کند. 

 /root

توجه داشته باشید که اکنون یک دایرکتوری vendor در   root خود داریم.

لودینگ خودکار برای سازماندهی کد

/root/vendor

و همچنین یک فایل autoload.php  تازه ایجاد شده.

لودینگ خودکار برای سازماندهی کد

/root/vendor/composer

و در آخر، برخی از فایل‌های پشتیبانی مختلف برای Composer :

لودینگ خودکار برای سازماندهی کد

فایل  Autoload:  

<?php



// autoload.php @generated by Composer



require_once __DIR__ . '/composer' . '/autoload_real.php';



return ComposerAutoloaderInit8ba53b7977ed0d2d530d1c0d7714ddcf::getLoader();

پیکربندی PSR4  

ابتدا باید فایل composer.json  را برای autoloading PSR4 پیکربندی کنیم.

{

    "autoload": {

                                "psr-4": {

                                                "Myapp\\": "source"

                                }

                }

}

هنگامی که فضای نامی خود را اعلان کردید، باید composer dump-autoload   را اجرا کنید تا فایل‌های autoloading مناسب تولید شود.

autoload_psr4.php

<?php



// autoload_psr4.php @generated by Composer



$vendorDir = dirname(dirname(__FILE__));

$baseDir = dirname($vendorDir);



return array(

    'Myapp\\' => array($baseDir . '/source'),

);

وارد کردن Autoloader  

توجه کنید که فایل index.php   در دایرکتوری root پروژه ما وجود دارد. در مرحله قبل، ما به سادگی از سه عبارت include استفاده کردیم تا از سه کلاس مورد نیاز برای اجرای برنامه خود استفاده کنیم. در این مرحله، ما دیگر از چندین عبارت include استفاده نمی‌کنیم، اما نیاز داریم که فایل autoloader را فقط یک بار در کد کلاینت خود   include کنیم تا به طور خودکار هر کلاس موردنیاز خود را بارگیری کند. علاوه بر این، عبارت use را برای کلاس‌هایTeam ، Country  و Player اضافه خواهیم کرد.می‌توانیم کد کلاینت خود را نیز بروزرسانی کنیم.

<?php



require('vendor/autoload.php');



use Myapp\Team;

use Myapp\Country;

use Myapp\Player;



$team = new Team;



$usa = new Country($team);



$player1 = new Player('Carli Lloyd');



$usa->recruit($player1);



$player2 = new Player('Morgan Brian');

$player3 = new Player('Ashlyn Harris');

$player4 = new Player('Tobin Heath');

$player5 = new Player('Alex Morgan');



$usa->recruit($player2);

$usa->recruit($player3);

$usa->recruit($player4);

$usa->recruit($player5);





echo '<pre>';

print_r($team->getplayers());

اما وقتی سعی می‌کنیم برنامه خود را اجرا کنیم، خطایی به صورت زیر دریافت می‌کنیم:

Fatal error: Class ‘Myapp\Team’ not found in C:\wamp\www\root\index.php on line 9

دلیل این امر این است که ما نام Myapp را تنظیم کرده بودیم. اگر ما یک فضای نامی را از طریق PSR4 اعلان کنیم، باید اطمینان حاصل کنیم که برای استفاده از فضای نامی، فایل‌های کلاس خود را بروزرسانی می‌کنیم.

بروزرسانی فضای نامی کلاس

این بسیار آسان است، تنها کاری که باید انجام دهیم اضافه کردن فضای نامی Myapp  ( namespace Myapp;  ) در بالای فایل‌های کلاس است.

/root/source/Country.php

<?php



namespace Myapp;



class Country

{

    protected $team;

    protected $name;



    public function __construct(Team $team, $name = 'USA')

    {

        $this->team = $team;

        $this->name = $name;

    }



    public function recruit(Player $player)

    {

        $this->team->join($player);

    }



}

/root/source/Player.php

<?php



namespace Myapp;



class Player

{

    protected $name;



    public function __construct($name)

    {

        $this->name = $name;

    }

}

/root/source/Team.php

<?php



namespace Myapp;



class Team

{

    protected $players = [];



    public function __construct($players = [])

    {

        $this->players = $players;

    }



    public function join(Player $player)

    {

        $this->players[] = $player;

    }



    public function getplayers()

    {

        return $this->players;

    }

}

حالا، هنگامی که کد کلاینت را اجرا می‌کنیم، به راه‌های پیروزی قهرمانی خود بازگشتیم.

لودینگ خودکار برای سازماندهی کد

مطالعه مقالات بیشتر در لیداوب:

رعایت نکات امنیتی در زبان برنامه نویسی PHP

مدیریت ارسال فایل با استفاده از سرآیند Range در PHP

مشخص کردن نوع داده بازگشتی در PHP 7

Composer بهترین برنامه در جهان برای توسعه دهندگان PHP است. در این آموزش، ما فقط به یک مورد از قابلیت‌های Composer نگاهی انداختیم و این توانایی برای تولید autoloading components قوی برای برنامه شماست. با استفاده از این قابلیت و در صورت داشتن هر وابستگی کلاسی، می‌توانید بدون مشکل برنامه‌های خود را سازماندهی کنید. با سایر مقالات ما در لیداوب همراه باشید.

 

دیدگاه ها

دیدگاه ها : 0


متاسفانه فقط اعضای سایت قادر به ثبت دیدگاه هستند

رایگان

اشتراک گذاری در
ثبت امتیاز
5 (1 رای)

   لطفا صبر کنید ...