2010-08-08 2 views
2

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

Все, что я пропавшим без вести ??

+0

Какое содержимое содержит var.php. –

+1

В первом примере вы включаете содержимое var.php в глобальное пространство. Во втором примере вы включаете содержимое var.php в локальное пространство для методов в своем классе. Что вы на самом деле пытаетесь сделать здесь? –

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

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

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

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

+1

Я получаю ошибку синтаксического анализа (неожиданный T_INCLUDE) для третьего варианта. :( – Dian

Смежные вопросы