2015-08-12 2 views
1

Довольно новый для PHP и по-прежнему пытается обернуть мою голову проблемами области, которые возникают.Сфера применения require_once и объектов

Некоторые suedo код:

Этот файл включен из index.php в корне.

login.php:

require_once("initialize.php"); 
//Get the $_POST data from the form submission. 
//Call on the user object 
User::createNewUser($firstName,$lastName,$email1,$password1); 

//HTML 
<form>signin stuff</form> 

initialize.php:

//Define some path defaults for the site. 
//Load up some scripts. 
require_once("session.php"); 
require_once("user.php"); 
//and several others 

session.php:

class Session... 
public $user; 
public function login... 
$session=new Session() 

user.php:

class User... 
public static function authenticate($email,$password){... 
$session->login($user); //Here is the problem, $session is not defined. 

По какой-то причине $ session еще не определен в User-> authenticate, но если я делаю var_dump в верхней части user.php перед классом, он утверждает, что он определен.

Достаточно ли этого? Почему $ session не определяется, когда это ясно.

Это ошибка, я получаю Примечание: Undefined переменной: сессия в D: \ Program Files \ WAMP \ WWW \ сайт \ приложения \ Контроллеры \ User.php на линии 55

Спасибо за любую помощь, которая вы можете предоставить.

+0

Это утверждение внутри метода, поэтому '$ session' относится к локальной переменной, если не сказать иначе. Вы можете сказать иначе: либо ссылаясь на переменную в глобальной области действия (очень уродливую и небезопасную), либо передавая эту переменную, либо самому методу, либо объекту, который вы создаете из класса, чтобы использовать этот метод. Очень элегантный был бы singleton-классом для сеанса со статическим getter, чтобы вы могли ссылаться на объект сеанса из любого места, где бы вы ни захотели, не помещая его в глобальную область. – arkascha

+0

Не уверен, что вы получаете, поэтому я ищу некоторые из того, что вы только что сказали. Благодарю. –

+0

Почему это «очень уродливое и небезопасное», чтобы иметь его в глобальном масштабе? А что такое «одноэлементный класс»? –

ответ

0

Вы пытаетесь использовать $ session в методе класса, который будет иметь локальную область для этого метода.

РНР руководство охватывает это хорошо: http://php.net/manual/en/language.variables.scope.php

Что вы можете сделать, это инициализацию $ сессии как глобальную переменную, а затем вы можете получить доступ, что из вашего метода AUTHENTICATE.

В качестве альтернативы вы можете передать $ session в качестве параметра вашему методу аутентификации.

Для примера:

->authenticate($email,$password,$session); 
+0

Я голова костей.PHP имеет дело с областью действия, с которой я не привык. Все, что мне нужно было включить global $ session в моей функции. Я продолжаю забывать об одной простой вещи. –

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