首页 > 解决方案 > 无法从所需 php 调用的基本 .php 访问变量

问题描述

假设我有如下代码:

索引.php

<?php
    require 'file_1.php';

    // file_1.php contents can go here, but i'm trying to make this simple and clutter free, thus clean. 
    // The reason being to not centralize all code in a single file should file_2.php, file_3.php, file_n.php exist.

    $app = new type_of_object();
    $app->intialize_some_stuff();
?>

文件_1.php

<?php
    $app->access_some_method($param1, new function($app) {
        // do some logic here...
    });
?>

这样做,我得到一个错误,如下所示:

注意:未定义变量:第 2 行 X:\project_folder\file_1.php 中的 app

总而言之,我正在尝试分散所有代码,使其不被定义index.php,而是让它们由不同的文件托管,例如file_1.phpto file_n.php. 问题是,我需要从所需$app文件访问变量,index.php例如,因为我只需要 1 个实例,不允许重复。file_1.phpfile_n.php

我也愿意接受另一种方法。

干杯!

编辑:我在 PHP 中相当新,而且我已经做了很少的研究,这毫无价值。除了我得到的与我的问题相反。此外,需要从其他 php 文件访问$appindex.php我问题的核心。

标签: php

解决方案


拆分代码可能是实现更好可维护性的好主意。您应该避免不明确的脚本名称。

在很大程度上,您肯定希望使用composer方法来维护包。

无论如何,对于基本的代码拆分,规则与常规脚本相同。代码在读取时被解释。只需在一个脚本中重写您的示例:

<?php
    $app->access_some_method($param1, new function($app) {
        // do some logic here...
    });

    $app = new type_of_object();
    $app->intialize_some_stuff();
?>

看到问题了吗?$app调用时根本没有初始化access_some_method

因此,这将起作用:

<?php
    $app = new type_of_object();
    $app->intialize_some_stuff();
    require 'file_1.php';
?>

但是收益很差。如果您已经有一个类,那么在某些情况下,在多个文件之间拆分逻辑可能会很有趣。我认为这是一个更好的例子(同一文件夹中的所有文件,没有命名空间):

<?php
   require('App');
   require('AppRequest');

   $app = new App();
   $request = new AppRequest();
   $app->process($request);

通过这种方式,您可以拆分主应用程序逻辑和请求分析逻辑,例如


推荐阅读