dongwaner1367 2018-08-09 17:32
浏览 95
已采纳

自动加载后的Composer,自动加载和类调用

I was wondering, I am currently trying to change my programming style to work with composer and its package system (my god why didn't I use it sooner?) but I was wondering I am trying to work following the PSR-4 standard.

And got the following php file

<?php

require_once(__DIR__ . '/vendor/autoload.php');

$class = new vendorname\packagename\classname;

$example = new vendorname\packagename\subpackage\classname2;

Is that good practice to use with composer and the PSR-4 standard?

Where the the classes are existing in:

- /vendor
-- /vendorname
--- /packagename
--- /src
---- classname.php
---- /subpackage
----- classname2.php

I am currently thinking it is, but I just want to make sure that I am using it correctly according to the PSR-4 standard :-).

  • 写回答

2条回答 默认 最新

  • doujianwan7570 2018-08-09 17:35
    关注

    Typically that is the way to go, but some packages use different namespaces (mainly packages that need to have legacy support, for as far as I have encountered). Therefore after you composer require the package and it's installed, you should check the files for the namespaces that are used. But yes, you are right, because the way you say it is how it's typically done.

    Also usually the package's readme/website has some examples on how to construct their objects.

    Example: The Monolog logger package has a file /vendor/monolog/monolog/src/Monolog/Logger.php that is in the Monolog namespace, not in the Monolog\Monolog\Src\Monolog namespace. Just be sure to check it, but most of the times examples on the package maintainer/owner's website will tell you how to use the package. In this example the readme on Github tells you how the package is used.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
  • douluogu8713 2018-08-11 15:50
    关注

    Most of packages include readme referring it's namespace. you can access classes using that namespace. if you can't found you can check from 'your_project_root/vendor/vendor_name/package_name/composer.json'.

    "autoload": {
            "psr-4": {"Monolog\\": "src/Monolog"}
        },
    

    For this example 'Monolog' is the namespace and this is the best way to follow psr standards.

    <?php
    
    use Monolog\Logger;
    use Monolog\Handler\StreamHandler;
    
    // create a log channel
    $log = new Logger('name');
    $log->pushHandler(new StreamHandler('path/to/your.log', Logger::WARNING));
    
    // add records to the log
    $log->warning('Foo');
    $log->error('Bar');
    

    You can see all this standards in https://www.php-fig.org/psr/

    Additionally you can check how this packages loaded in 'autoload_psr4.php' located in

    'your_project_root/vendor/composer/autoload_psr4.php'

    when you run composer require, composer update or composer dump-autoload command. this file will updated.

    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 win11安卓子系统打开谷歌登录不了切使用浏览器显示处于离线状态
  • ¥15 三维直角坐标系下,给定一个平面内四个点坐标,如何将四个点逆时针排序
  • ¥15 UnityWebRequest访问内网地址502
  • ¥20 Python语言来实现牛顿法(Newton's Method)解决非线性(系统)方程的问题。
  • ¥15 matlab控制工业相机采集图像
  • ¥25 R里做折线图和柱状图
  • ¥20 使用kokkos移植项目,遇到问题
  • ¥15 求该问题的Matlab代码
  • ¥15 python下使用pdpbox为何提示has no attribute 'pdp_isolate'?
  • ¥15 求java web病房管理系统项目,用netbeans做的