0

私は独自のMVCを使用してプロジェクトに取り組んでいますが、これに似たコードを含むglobal.phpというファイルがあります...

<?php
session_start();

require('config/config.php');
require('classes/pdo_extender.php');
require('classes/mainClass.php');
require('classes/utilities.php');

$mainClass = new mainClass;
?>

次に、ルートディレクトリに次のコードを含むページがあります

<?php 
require_once($_SERVER['DOCUMENT_ROOT'].'/globals/global.php');
$mainClass->init();
?>

init関数のコードには、現在表示されているページの名前に基づくファイルが含まれています...

public function init() {
    $section=explode("/",$_SERVER['SCRIPT_NAME']);
    $section=explode(".",$section[count($section)-1]);
    include("controllers/".$section[0].".php");
}

つまり、ルートlogin.phpにあるとすると、global.phpが含まれ、$ mainClassを再宣言せずにinit関数を呼び出すため、controllers / login.phpが含まれますが、このページでは$mainClassを再宣言する必要があります。 =新しいmainClass;

とにかくそれを取得して、init関数から含まれるファイルがglobal.phpで設定された最初の$ mainClassにアクセスできるようにする方法はありますか?

編集:受け入れられたものに加えて私が見つけた別の解決策は次のとおりです:

public function init() {
    $section=explode("/",$_SERVER['SCRIPT_NAME']);
    $section=explode(".",$section[count($section)-1]);
    $mainClass= $this;
    include("controllers/".$section[0].".php");
}
4

1 に答える 1

1

私は以前にこのようなものを思いついたことがあります。現在の問題は、その関数に含まれるファイルが関数のスコープを継承するため、必要に応じてグローバルにアクセスできないことです。考えられる解決策は、te関数を使用してファイル名とパスを判別し、それらを並べ替えの配列または1つだけの場合は文字列で返すことです。次に、関数の外部でグローバルにインクルードを実行します。

public function init() {
    $section=explode("/",$_SERVER['SCRIPT_NAME']);
    $section=explode(".",$section[count($section)-1]);
    return "controllers/".$section[0].".php";
}

<?php 
require_once($_SERVER['DOCUMENT_ROOT'].'/globals/global.php');
$file = $mainClass->init();
include($file);

// now the file is in the global include tree along with global.php 
// allowing the file to have access to w/e it is you have in there.
?>
于 2012-05-18T15:20:29.903 に答える