2014-01-10 4 views
0

Я не понимаю, почему функция isLoggedIn(); не определена в соответствии с ошибкой, которую я получаю. У меня есть две страницы, одна из которых - это .php, где определены функции, и .phtml, где у меня проблема. Ниже приведен код для обоих.Звонок на неопределенную функцию isLoggedIn()

public function isLoggedIn() { 
if(!session_id()) { 
    return false; 
} 
else 
{ 
    return true; 
} 
} 

Выше находится на .php, которая показывает свою функцию.

<?php 
    $is_logged_in = isLoggedIn(); 
    if($is_logged_in) { 
    echo '<li><a href="logout.php">Logout</a></li>'; 
    } 
    else { 
    echo '<li><a href="login.php">Login</a></li>'; 
    } 
?> 

Выше находится на .phtml, который должен работать, насколько мне известно.

Сама вершина .phtml документа имеет

Что это имя и местоположение определения функций.

На IDE нет никаких признаков того, что что-то не так.

Справка будет принята с благодарностью.

+4

Это выглядит как 'isLoggedIn()' является частью класса (отсюда 'public' ключевое слово). Вы не можете просто вызвать методы объекта самостоятельно (если только они не являются «статическими»).Вам нужно создать экземпляр нового объекта любого типа, который есть у класса. – BenM

+2

Поскольку это не функция, это метод класса (согласно ключевому слову 'public'); –

+2

Несмотря на то, что проверка 'session_id()' составляет проверку, если пользователь вошел в систему, бьет меня ... – BenM

ответ

-2

изменить его

class logging{ 
public function isLoggedIn() { 
    if(!session_id()) { 
     return false; 
    } 
    else 
    { 
     return true; 
    } 
    } 
} 

, а затем изменить другую часть в

$is_logged_in = new logging; 
if($is_logged_in->isLoggedIn()) { 

Это должно работать

+0

Блестящий, ваш совет работал! – user3046033

+1

Это действительно не относится к классу. Используйте тройную операцию, как показано в моем ответе ... – BenM

0

isLoggedIn() - это функция public, означающая, что вы должны использовать объект для доступа к этой функции. (ООП)

Для вызова функции FHE, объект SessionData должен существовать:

Пример:

$session = new SessionData(); 
$is_logged_id = $session->isLoddedIn(); 

Проверьте наличие объекта в ваших встроенных скриптов, это может быть уже инстанцирован (некоторые глобальные переменная).

2

Как я объяснил в комментариях, это выглядит как isLoggedIn() является частью class (следовательно, ключевое слово public). Вы не можете просто вызвать методы объекта самостоятельно (если они не являются статическими). Вам нужно создать экземпляр нового объекта любого типа, который есть у класса.

Кажется, что isLoggedIn() просто проверяет session_id(), поэтому вы можете легко экстраполировать это в свой код и упростить все это. Ваш PHTML фрагмент может быть переписан с использованием ternary operator как:

echo (session_id()) ? '<li><a href="logout.php">Logout</a></li>' : '<li><a href="login.php">Login</a></li>'; 

Это уже было сказано, хотя, метод, наверное, в классе по причине.

1

удалить слово public.

function isLoggedIn() { 
    if (!session_id()) { 
     return false; 
    } else { 
     return true; 
    } 
} 

хотя вы, вероятно, следует следовать советам других и смотреть на классы

+0

Если 'isLoggedIn()' находится внутри класса, удаление ключевого слова 'public' не будет иметь никакого эффекта. – BenM

+0

В приведенном примере я не вижу класса. удаление ключевого слова 'public' сделает скрипт работать процедурно. – adamS

+0

Он включает класс, с функцией isLoggedIn, поэтому просто удаление публичной части ничего не исправит, хотя оно будет работать до тех пор, пока функция находится в том же файле, что и код, вызывающий эту функцию. –

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