1

私はOOPにはかなり慣れていませんが、PHPは初めてではありません。別のクラス内からクラスを初期化しようとしています。

index.php

<?
error_reporting(E_ALL);
require("classes/memcache.php");
require("classes/video_test.php");
$videos = new video;
?>

video_test.php

<?php
    class video {

            private $mcache;

            public function __construct() {
            $this->mcache = new MCACHE();
            }

            public static function get_scene($scene_id) {
            $info = $this->$mcache->get_item("mykey");
            }


    }
?>

プロデュース: PHP Fatal error: Using $this when not in object context in

4

3 に答える 3

7

オブジェクト コンテキストでない場合に $this を使用する

static として宣言されているメソッドでは $this を使用できません。static キーワードを削除して、オブジェクト ハンドルを介してメソッドを使用するだけです。

$vid = new video()
$vid->get_scene();
于 2012-07-25T14:27:19.517 に答える
1

静的メソッドはクラスに属し、newで作成したオブジェクトには属しません。$this 疑似変数は、クラスではなくオブジェクトを参照します。これが、コードが壊れる理由です。関数の前にある static キーワードを削除するだけで、このコードを修正できます。または、全体を静的に再定義することもできます ( $this の代わりにself::を使用し、$mcache static を宣言し、静的メソッドを作成してその変数を初期化します)。

あなたが作った別のバグは: $this->$mcacheです。プロパティに適切にアクセスするには、$this->mcacheと記述します。あなたのコードは、関数で定義されていない $mcache 変数にある名前のプロパティにアクセスしようとしていました (したがって、$this->nullにアクセスしようとしていました)

于 2012-07-25T14:37:33.597 に答える
-1

さらに付け加えると、クラスとインスタンスには重要な違いがあります。静的メソッドまたは属性がクラスに属すると言うとき、それはクラスのすべてのインスタンスがこの 1 つの属性を共有することを意味します。対照的に、オブジェクト インスタンスには、個別の属性の独自のセットがあります。OOP をマスターするには、この理解が非常に重要です。

于 2012-07-27T19:10:55.627 に答える