2017-05-31 76 views
0

我有一個php類,它使用「include」從文件加載一些html和php。在該文件中,我想訪問包含該文件的類對象,但我不斷收到「致命錯誤:調用一個非對象的成員函數makeSizesSelect()...」PHP類包含一個文件,但該文件無法訪問類

我試過兩個include並要求,我試過聲明全局變量,我試過了我能想到的一切,以及迄今爲止發現的所有內容。沒有任何東西似乎允許我包含的文件讓php代碼訪問包含它的對象。

任何想法?

這裏的一些片斷......

類文件:

class cdf { 
    public $version = 001; 

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

和所需文件container.php包含以下(除其他東西):

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

我然後嘗試使用該對象:

$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

我的這個類顯然是實例化的,而且這個對象是存在的,正如我所說的,shortcode函數的第一行工作,如果我沒有實例化這個對象,情況就不是這樣了 – CraigD

回答

0

在該文件中包含您需要實例化的類。

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

當你想在一個類來訪問一個功能,你需要首先實例化類,否則你不會有交流塞住它裏面的任何東西。

此外,請確保您所包含的文件不會包含在類別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在這個類的方法中,這就是爲什麼我期望$ this可以工作,就像它在include()之前的行一樣。 – 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 to .tmpl修復了這個問題,我現在包含的文件可以訪問包含它的對象。奇怪的。 (當然,不足之處是現在,我的IDE不着色我的代碼爲我。:-()爲您的建議傢伙

感謝。

+0

不知道你的問題是什麼,它似乎對我來說工作得很好。我會再次更新我的答案。此外,我不知道爲什麼你想要在方法中包含文件。 – Arthur