多年来我编写了许多不同的语言,包括使用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中询问过这个问题,但我想我无法弄清楚我在问什么。
这一次,你的回答帮助了我,并让我在我的代码中尝试不同的东西......谢谢!
以不混合定义和运行时代码的方式编写代码。这通常是包含所有“问题”的根源。
这是PSR-1标准的一部分(所以有些工具可以像PHP Code Sniffer一样自动检查这个):
文件应该声明符号(类,函数,常量等)或引起副作用(例如生成输出,更改.ini设置等),但不应该同时执行这两种操作。
编写自动加载的代码。
遵循组织代码的常见惯例,简单的方法是使用已经完成研究并描述常见模式的pds/skeleton。
使用Composer打包和使用结果。它可能看起来“涉及”,但相信我的作曲家对努力是负面的。你尝试发明或做“更简单”的任何东西最终都会比仅使用Composer更复杂。
这不是你的问题不好或理性,它不适合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有一堆文件,但我不知道它们中的任何一个通常被称为项目文件。
Cerad的回答让我重新思考如何使用require语句,特别是在可以使用它的地方。我更新了原始问题,以显示哪些不起作用,哪些内容起作用。希望有人,如果有人,其他人像我一样错过了这个细节,可能会觉得这个答案很有用。
谢谢大家的回应。