PHP включает вне класса только один раз - PullRequest
2 голосов
/ 08 августа 2010

Я новичок в понятиях PHP ООП. Одна из первых вещей, которые привлекли мое внимание, это то, что я не могу включить скрипт 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 Ответ

4 голосов
/ 08 августа 2010

Если переменные определены в глобальном пространстве, то вам нужно сослаться на них в глобальном пространстве внутри методов вашего класса:

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();

Это не очень хорошая идея. Использование глобальных переменных, как правило, является плохой практикой и свидетельствует о том, что вы еще не совсем понимаете принципы ООП.

Во втором примере вы определяете переменные в локальном пространстве для отдельных методов

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();

Поскольку каждая переменная определяется независимо в пространстве локального метода, изменение $ var1 в getVariables () не влияет на $ var1 в getOtherVariables ()

Третий вариант - определить переменные как свойства класса:

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-> var1 вместо $ var1 для доступа к свойствам. Если у вас есть несколько экземпляров userClass, свойства в каждом экземпляре могут быть разными, но в каждом экземпляре свойства согласованы для всех методов этого экземпляра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...