2017-05-31 36 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