2012-10-08 44 views
0

我有一个管理员类:PHP设置变量之前包括和回声之后

<?php 
    Class Admin extends Controller{ 


     function __construct() { 
      parent::__construct(); 
     } 

      function getPage(){ 
       $num = 5; 
       $this->view->load('test'); 
      } 

    } 
?> 

扩展控制器类:

<?php 

class Controller{ 

    function __construct() { 
     $this->view = new View(); 
    } 

} 

?> 

视图类:

<?php 
Class View{ 

    function __construct() { 

    } 

    public function load($file){ 
     include($_SERVER["DOCUMENT_ROOT"].'/main/views/'.$file.'.php'); 
    } 

} 
?> 

所以在test.php文件我试图echo $num;,但我什么也没得到...

,如果我尝试

$num = 5; 
include($_SERVER["DOCUMENT_ROOT"].'/main/views/test.php'); 

它回显在5

什么问题吗?

+1

当您在load方法中包含test.php文件时,'test.php'中的'echo $ num;'只会在'function load'内打印变量'$ num'。 – air4x

+0

我看到...有关于此的任何解决方法?我真的不喜欢在每个功能包括 - 谢谢 – fxuser

+0

@fxuser你使用任何框架? –

回答

1

您可以将关联数组传递给函数load作为可选参数,然后使用extract该数组在变量范围内具有变量。

public function load($file, $data = array()){ 
    extract($data); 

    include($_SERVER["DOCUMENT_ROOT"].'/main/views/'.$file.'.php'); 
} 

或者

public function load($file, $data = array()){ 
    foreach ($data as $key => $val) 
     ${$key} = $val; 

    include($_SERVER["DOCUMENT_ROOT"].'/main/views/'.$file.'.php'); 
} 

为我个人的经验表明,第二种方法是稍快。

在功能getPage()所有你需要做的是:

$this->view->load('test', array('num' => 5)); 
+0

继承这就是air4x提到的问题评论......谢谢! – fxuser

0

你的$ NUM范围局限在功能GETPAGE,从不它作为对象的peice的。您可以修改函数创建一个函数GETPAGE()返回$ NUM和test.php的呼应它,或者你可以重写代码,例如:

<?php 
     Class Admin extends Controller{ 


      function __construct() { 
       parent::__construct(); 
      } 

      public $num = 5; 

      function getPage(){ 
        $this->load->view('test'); 
       } 

     } 

    class Controller{ 

     function __construct() { 
      $this->view = new View(); 
     } 

    } 

    Class View{ 

     function __construct() { 

     } 

     public function load($file){ 
      echo "I shall skip the file include"; 
     } 

    } 

    $test = new Admin(); 
    echo $test->num; 

    ?> 

你可能想看看这个:http://www.php.net/manual/en/language.oop5.visibility.php

它会给你一个你可以在未来实现哪些可见性选项的想法。