2017-05-31 12 views
0

"include"を使用してファイルからHTMLおよびPHPを読み込むPHPクラスがあります。そのファイル内で、ファイルを含むクラスオブジェクトにアクセスしたいが、 "致命的なエラー:非オブジェクト上のメンバー関数makeSizesSelect()を呼び出す..."というメッセージが表示される。PHPクラスにファイルがありますが、そのファイルはクラスにアクセスできない

私はグローバルを宣言しようとしましたが、私は考えていることすべてを試しました。私は含まれているオブジェクトにPHPコードをアクセスさせるためにインクルードするファイルを許可していないようです。

アイデア?

<?php 
    echo "version = ".$this->version; 
?> 

I:

class cdf { 
    public $version = 001; 

    public function cdf_shortcode($atts,$content) 
    { 
     $this->slog(2,"shortcode() case: show"); 
     require('templates/container.php'); 
    } 
} 

、必要なファイルcontainer.php(他のものの中で)次のものが含まれます。

はここ

クラスファイルが...抜粋ですオブジェクトを使用しようとします。

$cdf = new cdf(); 
$cdf->cdf_shortcode(null, null); 

行$ this-> slog(2、 "shortcode()case:show")が機能します。それは(私はこのスニペットに含まれていない)その機能を実行します。しかし、私が必要とするファイル(またはインクルードするファイル)は$ thisを使ってオブジェクトにアクセスすることはできません。私は迷っている。 :-(

私がやりたいすべてが含まれたファイル内でのアクセス、ファイルが含まれていたクラスの変数やメソッド...

申し訳あり、いくつかの情報を追加しました。この場合、私はわからないんだけどすべての違いになります。上記のコードは、WordPressのプラグインのすべての部分である。

+1

ファイルを含めるには十分ではありません、あなたはあなたのクラスをインスタンス化する必要があります。 – roberto06

+0

$ obj = new cdf(); $ obj-> cdf_shortcode( ''、 '')のようなメンバ関数にアクセスして、クラスにアクセスするオブジェクトを作成していないので、クラスにアクセスするためのオブジェクトが作成されていないためです。 –

+0

私が言ったように、ショートコード関数の最初の行は動作しますが、オブジェクトをインスタンス化しなかった場合はそうではありません – CraigD

答えて

0

あなたがクラスをインスタンス化する必要が含まれているファイルでは。

<?php 
$yourClass = new cdf(); 
echo "version = ".$yourClass->version; 
?> 

あなたはクラスの機能にアクセスしたいときは、最初にクラスをインスタンス化する必要があります。それ以外の場合は、ACはありません。それの中の何かに行き着いてください。

また、含まれているファイルが、エラーの原因となるため、クラスcdfが存在しない場所に含まれていないことを確認してください。

変数$thisは、メソッド、変数などが同じオブジェクト内にある場合にのみアクセスできます。

働いているように見えるあなたの答えに基づいて更新:

Example.php

<?php 
echo $this->returnString(); 
echo $this->randomVariable; 

File.php

<?php 
class IncludedClass 
{ 
    public $randomVariable = 123; 
    public function returnString() 
    { 
     return "some random string"; 
    } 
    public function meh() 
    { 
     require_once('Example.php'); 
    } 
} 
$meh = new IncludedClass(); 
$meh->meh(); 
+0

しかし、これは私がどこにいるかです。私はオブジェクトをインスタンス化してから使用します。私の考え方に含まれているファイルは、追加のcクラスのメソッドにodeを渡す必要があります。そのため、include()の前の行と同じように、$ thisが動作することを期待しています。 – CraigD

+0

'$ this-> version;'を使うことで、コードはあなたが 'echo" version = "。$ this-> version;'と同じクラスにある変数にアクセスしようとしていることを前提としています。 '$ this'をクラスをインスタンス化したオブジェクトの名前に置き換えます。私の例では '$ yourClass'です。 – Arthur

+0

私はちょうどあなたの解決策を試して、$ mycdf = new cdf()を追加しました。 echo "version ="。$ mycdf-> version;私はまだエラーが表示されます:致命的なエラー:クラス 'cdf'が見つかりません。 – CraigD

0

好奇心溶液で好奇心の問題。私は最終的にこちらに答えが見つかりました:

Possible to access $this from include()'d file in PHP class?

私はこのポスターは成功の同じ欠如と(グローバル、別の変数にキャストなど)を試してみました、すべての明白な解決策を試してみました。ファイル拡張子を変更するだけです。phpから.tmplに問題が修正されました。私のインクルードファイルは、それを含むオブジェクトにアクセスできるようになりました。奇妙な。 (もちろん、欠点は今、私のIDEは私のために私のコードを色付けしないということである。:-()ご提案の男性のための

感謝。

+0

問題があなたの側にあったかどうかわからない、それは私にとってうまくいっているようだ。私は再び答えを更新します。また、なぜあなたはメソッドの内部にファイルを含めることにしたいのか分かりません。 – Arthur

関連する問題