我对PHP OOP相当新,我遇到的问题是我无法围绕脚本的跟随布局:
有没有人有任何指针或方向。我试着谷歌搜索它,但无法远远接近我想做的事情。
它始于: - 作品
$gw = new GWCMS();
然后在GWCMS扩展mySQL的GWCMS()的_construct内部工作
parent::__construct(DB_HOST,DB_USER,DB_PASSWORD,DB_NAME);
$this->build();
然后它调用build() - 工作
public function build(){
...
$page['content'] = $this->plugins($page['content']);
...
$output = $this->output($theme,$page);
echo eval('?>' . $output);
}
调用plugins() - 我们开始遇到问题
public function plugins($content){
$x = 0;
if ($handle = opendir(STOCKPLUGINPATH)) {
while (false !== ($entry = readdir($handle))) {
if(is_dir(STOCKPLUGINPATH . $entry . '/') && $entry != '.' && $entry != '..'){
if(file_exists(STOCKPLUGINPATH . $entry . '/inc.php')){
include(STOCKPLUGINPATH . $entry . '/inc.php');
$content = do_shortcode($content);
}
}
}
closedir($handle);
}
return $content;
}
前面的代码包含inc.php,其中列出了要包含的文件:
include(STOCKPLUGINPATH . 'Test/test.php');
test.php包含功能列表。上面的do_shortcode访问函数没有问题,但是我需要在test.php中使用以下函数来访问$ gw-> fetchAssoc();其中fetchAssoc位于gwcms的父级中
function justtesting2($attr){
$config = $gw->fetchAssoc("Select * from gw_config");
foreach($config as $c){
echo $c['value'];
}
}
当我运行脚本时我得到了
Fatal error: Call to a member function fetchAssoc() on a non-object in /home/globalwe/public_html/inhouse/GWCMS/gw-includes/plugins/Test/test.php on line 9
答案 0 :(得分:0)
当文件包含在函数中时,它们只能访问该函数的范围:
http://php.net/manual/en/function.include.php#example-136
您需要将您创建的对象的引用提供给包含该文件的函数,或将其拉入该函数的范围以进行访问。
答案 1 :(得分:0)
编写OOP代码意味着重组,以避免文件和函数的混乱掉入文件中,而上帝知道什么不是。
尝试依靠编写一个模拟您想要实现的行为的类。该类应该包含为您提供数据的属性值,以及帮助类行为的方法,就像您正在对其进行建模的那样。
回答你的问题:
class MyClass {
public $my_property = 4;
public function MyMethod() {
include('file.php');
}
public function MyOtherMethod() {
$this; // is accessible because MyOtherMethod
// is a method of class MyClass
}
}
// contents of file.php
$variable = 3;
function MyFunction($parameter) {
global $variable; // is accessible
$parameter; // is accessible
$this // is not accessible because it was
// not passed to MyFunction as a parameter
// nor was it declared as a global variable
// MyFunction is not a method of class MyClass,
// there is no reason why $this would be accessible to MyFunction
// they are not "related" in any OOP way
// this is called variable scoping and/or object scoping
}