PHP仅包括外部类一次

时间:2010-08-08 11:11:55

标签: php class include

我是PHP OOP概念的新人。引起我注意的第一件事是,我不能在脚本开头写一次就不能将PHP脚本包含到多个类中。我的意思是

<?php
include 'var.php';
class userSession{
  /* all the code */
  public function getVariables(){
   /* use of variables which are inside var.php */
  }
  public function getOtherVariables(){
   /* use of variables which are inside var.php */
  }
}
?>

这不起作用。

我必须这样做 -

 <?php
    class userSession{
      /* all the code */
      public function getVariables(){
       include 'var.php';
       /* use of variables which are inside var.php */
      }
      public function getOtherVariables(){
       include 'var.php';
       /* use of variables which are inside var.php */
      }
    }
    ?>

我想念的任何事情?

1 个答案:

答案 0 :(得分:4)

如果变量是在全局空间中定义的,那么您需要在类方法的全局空间中引用它们:

include 'var.php'; 
class userSession{ 
  /* all the code */ 
  public function getVariables(){ 
   global $var1, $var2;
   echo $var1,' ',$var2,'<br />';
   $var1 = 'Goodbye'
  } 
  public function getOtherVariables(){ 
   global $var1, $var2;
   echo $var1,' ',$var2,'<br />';
  } 
} 

$test = new userSession();
$test->getVariables();
$test->getOtherVariables();

这不是一个好主意。使用全局变量通常是不好的做法,并且表明您还没有真正理解OOP的原理。

在第二个示例中,您将在各个方法的本地空间中定义变量

class userSession{ 
  /* all the code */ 
  public function getVariables(){ 
   include 'var.php'; 
   echo $var1,' ',$var2,'<br />';
   $var1 = 'Goodbye'
  } 
  public function getOtherVariables(){ 
   include 'var.php'; 
   echo $var1,' ',$var2,'<br />';
  } 
} 

$test = new userSession();
$test->getVariables();
$test->getOtherVariables();

因为每个变量是在本地方法空间中独立定义的,所以在getVariables()中更改$ var1对getOtherVariables()中的$ var1没有影响

第三种方法是将变量定义为类属性:

class userSession{ 
   include 'var.php'; 
  /* all the code */ 
  public function getVariables(){ 
   echo $this->var1,' ',$this->var2,'<br />';
   $this->var1 = 'Goodbye'
  } 
  public function getOtherVariables(){ 
   echo $this->var1,' ',$this->var2,'<br />';
  } 
} 

$test = new userSession();
$test->getVariables();
$test->getOtherVariables();

这将变量定义为userClass空间中的属性,因此可以通过userClass实例中的所有方法访问它们。请注意使用$ this-&gt; var1而不是$ var1来访问属性。如果您有多个userClass实例,则每个实例中的属性可以不同,但​​在每个实例中,属性在该实例的所有方法中都是一致的。