0

私はこの辺りで新しいです、そして誰かが私を助けることができるかどうか私は簡単な質問があります。簡潔にするために、私はWebサイトで作業しており、ファイルをディレクトリで区切っており、現在のページの名前に応じてファイルを含めています。たとえば、次のようなメインページのdashboard.phpがあります。

include $file1;
include $file2;
include $file3 etc.

ここで、オブジェクトを作成するときに自動的に必要なすべてのファイルを含むクラスページを使用しようとしています。私の問題は、クラスの助けを借りてファイルをインクルードすると、インクルードされたファイルでオブジェクトのインスタンスが見つからないように見えることです。例:$page=new Page("Test") includes $file1,$file2etc....今$file1でオブジェクト$pageを使おうとすると、それが見つかりません。誰かがこの問題の解決策を持っているか、それがウェブページをデザインする間違った方法だと思うなら、私に知らせてください。

インクルードの問題ではありません。インクルードは機能しています。オートロードを使用しています。問題は、そのクラスに含まれるクラスのオブジェクトメソッドを確認することです。もっと明確にしましょう:

main.php :

    $page=new Page("Test");

Page.class.php :
__construct($title)
{
include($file1);
include($file2);
}
$file1:
echo "test"; // working
$file2:
echo $page->getTitle() // doesn't work, don't worry about the method it exists and works
4

2 に答える 2

0

必要なものが必要なクラスファイルを自動的にロードすることである場合、PHPにはすでにそのための関数があります。

http://php.net/manual/en/language.oop5.autoload.php

于 2012-08-01T18:04:49.753 に答える
0

マニュアルによると、関数は含まれている行の可変スコープを継承します。include()

私はあなたが現在次のようなことをしていると仮定しています:

class Page {
public __construct() {
    include($file1);
    include($file2);
}
}

含めるクラスの外部でファイルにアクセスできるようにする必要がある場合は、次のように、クラスの外部にインクルードを追加する必要があります。

include($file1);
include($file2);
class Page { ...

(最新の更新ごとに)クラスインスタンス自体にアクセスするためにインクルードされたファイルが必要な場合は、$this疑似変数を使用します。$page含まれているファイル内で使用できない理由は$page、定義されていないためです。その変数のスコープは、main.phpファイルとそれに含まれる他のファイル内にあります(ただし、「内部」クラスはありません)。

インクルード($ file2)を更新して、代わりに使用$thisすることができ、正常に動作するはずです。echo $this->getTitle()echo $page->getTitle()

$pageまたは、の代わりに変数を使用する場合は、次のように使用するファイルを含める直前$thisなどに定義できます。$page = $this;

public __construct() {
    $page = $this;
    include($file2); // file2 will now have access to a variable named $page
}
于 2012-08-01T18:05:36.540 に答える