如何在PHP中创建一个不需要在我的主Symfony 2类文件中“生存”的外部函数库?

问题描述 投票:0回答:3

多年来我编写了许多不同的语言,包括使用Symfony 2的PHP最近两年,我现在正在开发一个Web应用程序。但是,与C#,C ++甚至普通的旧C不同,我还没有弄清楚如何创建一个函数文件的外部库或一组这样的文件,我可以在Symfony bundle控制器的php文件中轻松“包含”这些文件。

现在,我把我的函数放在我写的不同bundle控制器的每个php文件中。当然,这会导致代码管理问题和更大的bundle控制器文件,因为随着时间的推移我会改进函数和代码块。

php require和include / require语句对此没有多大帮助,因为你不能仅仅根据我的经验将一堆函数/代码块放在include / require文件中,而不创建实用程序包装类。

所有这一切对我来说都很奇怪,我之前使用的各种语言,我可以在一个包含文件中包含许多不同的函数,或者只是调用预编译的函数库,并使用include头文件来告诉项目函数调用接口,共享变量和常量。

我知道Symfony支持供应商库,但它们看起来过于复杂,我还没有找到关于如何创建它们的“愚蠢”教程。

有人可以指点我的网站或书籍,涵盖我正在寻找的东西吗?

谢谢。

================================================== =========================更新的问题 - 我的新手错误。

这是我正在处理的项目包控制器文件的精简版本:

<?php
namespace AppBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
 :
use DateInterval;

class WebAppController extends Controller {

    //
    // Putting the require statement here causes a number of errors.
    // The ' before the common_code is unexpected, as is the trailing ' and ;
    //
    // This is what I had happen when I first tried to include a library of
    // functions that I wanted to use in my bundle controllers, and caused me
    // to think that php could only include code within the function
    // definitions, but not complete functions (definitions and code bodies).
    //

    require 'common_code/fileUtilities.php'; // a file containing a bunch of
                                             // File-Utility functions ...

    /**
     * @Route("/WebApp/profileInt")
     * internal profile page.
     *
     * Parameters: None
     * @return:    Internal profile page response string.
     */

    public function profileIntAction() {
     :

         //
         // Placing the require statement here works, but then the utility
         // functions need to be added to every action function because the
         // functions in the fileUtilities.php file become locally nested
         // with each function.
         //

     :
    }

}

//
// Placing the require statement here also works, and the utility functions
// are 'included' only once in each bundle controller, which is exactly what
// want.
//
?>

不知何故,当我之前查看include / require语句时,我错过了在bundle控制器文件中的主类之后可以使用require语句。我之前甚至在StackOverflow中询问过这个问题,但我想我无法弄清楚我在问什么。

这一次,你的回答帮助了我,并让我在我的代码中尝试不同的东西......谢谢!

php symfony shared-libraries bundle
3个回答
0
投票

以不混合定义和运行时代码的方式编写代码。这通常是包含所有“问题”的根源。

这是PSR-1标准的一部分(所以有些工具可以像PHP Code Sniffer一样自动检查这个):

文件应该声明符号(类,函数,常量等)或引起副作用(例如生成输出,更改.ini设置等),但不应该同时执行这两种操作。

https://www.php-fig.org/psr/psr-1/

编写自动加载的代码。

遵循组织代码的常见惯例,简单的方法是使用已经完成研究并描述常见模式的pds/skeleton

使用Composer打包和使用结果。它可能看起来“涉及”,但相信我的作曲家对努力是负面的。你尝试发明或做“更简单”的任何东西最终都会比仅使用Composer更复杂。


0
投票

这不是你的问题不好或理性,它不适合stackoverflow。 Stackoverflow更适用于特定的编程类型问题。您可以在网站的“如何提问”部分阅读更多相关信息。认为自己有点幸运,只得到一次投票。我原本预计这会很快关闭。

话虽如此,我会用自己的一个来复合你的罪并使用答案,而不是回答这个问题,而是要获得更多的信息。我猜你的困惑基本上是一个术语。你的话说的只是一件事,但我怀疑你是在完全要求别的东西。这就是stackoverflow喜欢在他们的问题中使用一些代码的原因之一。

特别:

php require和include语句对此没有多大帮助,因为你不能只在我的经验中将一堆函数/代码块放在include / require文件中,而不创建实用程序包装类。

老实说,我不知道“函数/代码块”是什么意思。显然这有效:

# functions.php
function func1() { echo "func1\n"; }
function func2() { echo "func2\n"; }
function func3() { echo "func3\n"; }

# main.php
require_once 'functions.php';

func1();
func2();
func3();

不需要“实用程序包装器类”。但同样,我很确定你知道这一点。

考虑使用您尝试执行的操作的特定示例更新您的问题。即使您使用“Symfony项目文件”的开场陈述也很不清楚。 Symfony有一堆文件,但我不知道它们中的任何一个通常被称为项目文件。


0
投票

Cerad的回答让我重新思考如何使用require语句,特别是在可以使用它的地方。我更新了原始问题,以显示哪些不起作用,哪些内容起作用。希望有人,如果有人,其他人像我一样错过了这个细节,可能会觉得这个答案很有用。

谢谢大家的回应。

© www.soinside.com 2019 - 2024. All rights reserved.