作曲家更新和 PHP 个短标签

Composer update and PHP short tags

我遇到了作曲家和 PHP 短标签 <?

的问题

接受下面的代码。

<?

    namespace SPACENAME;

    class generic_class {

        private $class_name = 'this_is_a_test';

        /**
         * This function is used to return the class name property.
         */
        public function some_function() {
            return true;
        }

    }

?>

如果您注意到,我们有一个名为 generic_class 的 class 和一个包含单词 class 名称 的评论,并且正在使用PHP的短标签<?

当我进行作曲家更新时,我的自动加载 class 显示如下:

<?php

    // autoload_classmap.php @generated by Composer

    $vendorDir = dirname(dirname(__FILE__));
    $baseDir = dirname($vendorDir);

    return array(
        'SPACENAME\name' => $vendorDir . '/the/path/to/generic_class.php'
    );

?>

它似乎在评论中提取了单词 class name 并将其视为 class 定义而不是使用实际的 class generic_class 的定义。但是,如果我使用 PHP 的完整标签 <?php 那么这个问题就不会发生并且我的自动加载 class 是正确的。

<?php

    // autoload_classmap.php @generated by Composer

    $vendorDir = dirname(dirname(__FILE__));
    $baseDir = dirname($vendorDir);

    return array(
        'SPACENAME\generic_class' => $vendorDir . '/the/path/to/generic_class.php'
    );

?>

因此,我通过将短标签替换为完整标签的方式解决了这个问题。然而,我目前在一个相当大的团队中工作,他们都在同一个项目中使用作曲家,并且不会因为短标签而遇到这个问题。我看不到我能够在短标签上更改他们的 usage/opinion 所以我希望有人有解决方案或至少有答案为什么这可能发生在我的机器上而不是其他人?

我确实尝试 google 寻找答案,但一无所获,是否有作曲家设置阻止它识别短标签为有效 php 因此它无法知道什么是代码什么是评论?

可能有用的信息

基本上你只需要在你的配置中禁用短标签。只需设置

short_open_tag=0

在你的 php.ini 中。请注意:composed 使用的 php 解释器有时与 Apache 版本不同 php.ini

参见:http://php.net/manual/en/ini.core.php#ini.short-open-tag