Проблемы с PHP классом - PullRequest
       2

Проблемы с PHP классом

2 голосов
/ 08 декабря 2010

У меня проблемы с этими классами в PHP ...

Мне нужна система "уведомлений" для всего моего сайта - однако этот скрипт работает только тогда, когда все находится в одном файле.Как я могу это исправить.

class Message  {

    var $message; // A variable to store a list of messages

    // Return a string containing a list of messages found,
    function listMessages($delim = ' '){
        if (count($this->message) > 0){
            echo implode($delim,$this->message);
        }else{
            return false;
        }
    }

    // Manually add Message
    function addMessage($description){
        $this->message[] = $description;
    }       
}
$message = new Message();

$message->addMessage('Article Title 1');
$message->addMessage('Article Title 2');

$message->listMessages();

Ответы [ 6 ]

2 голосов
/ 08 декабря 2010

Я думаю, вы ищете функцию include_once. По сути, вы хотите, чтобы каждый из ваших классов был в отдельном файле, а затем, когда вы хотите их использовать, вы вызываете include_once("thatfile.php");, чтобы сделать этот класс доступным для вашего приложения.

Я должен уточнить, что вы должны использовать include_once (или require_once, если хотите) вместо include, потому что, если вы дважды включите свой файл класса, вы получите ошибки, говорящие, что вы ' пытаемся определить класс, который уже существует.

Используя ваш пример, ваша программа будет выглядеть так:

MessageClass.php

<?php
class Message  {

  public $message;

  // Return a string containing a list of messages found
  public function listMessages($delim = ' '){
      if (count($this->message) > 0){
          echo implode($delim,$this->message);
      }else{
          return false;
      }
  }

  // Manually add Message
  public function addMessage($description){
      $this->message[] = $description;
  } 
}

index.php

<?php

include_once("MessageClass.php");

$message = new Message();
$message->addMessage('Article Title 1'); $message->addMessage('Article Title 2');
$message->listMessages(); 

Также обратите внимание, что я изменил ваши переменные класса (члены) и функции (методы), чтобы включить модификатор public. Я не уверен на 100% в том, как это работает в PHP, но в большинстве языков эти значения по умолчанию равны private, что означает, что к ним нельзя получить доступ извне класса. Всегда лучше включать их, чтобы было понятно.

Возможно, вы захотите взглянуть на функцию __autoload(), которая вызывается всякий раз, когда вы пытаетесь использовать класс, который еще не определен. В этой функции, которую вы определяете сами, вы можете выяснить, в каком файле находится данный класс, и include_once автоматически, когда вам это нужно. В более общем смысле вам следует обратиться к функции spl_autoload_register, которая является тем же самым, но с гораздо большей гибкостью.

1 голос
/ 08 декабря 2010

Вы пытались поместить свой класс в отдельный файл

- class.Message.php -----

var $message; // A variable to store a list of messages

// Return a string containing a list of messages found,
function listMessages($delim = ' '){
    if (count($this->message) > 0){
        echo implode($delim,$this->message);
    }else{
        return false;
    }
}

// Manually add Message
function addMessage($description){
    $this->message[] = $description;
}       
}

?>

---- конецкласс -----

--- testPageMessage.php -----

<?php 

require_once('class.Message.php');

$message = new Message();

$message->addMessage('Article Title 1');
$message->addMessage('Article Title 2');

$message->listMessages();

?>

---- конечная тестовая страница -----

На боковой ноте вы можете потребовать или включить.Разница в том, что REQUIRE выдаст исключение, если оно не найдено.INCLUDE выдаст предупреждение, если оно не найдено.

_ONCE (Require_once или Include_once) обеспечит включение файла только один раз.(в отличие от нескольких раз)

1 голос
/ 08 декабря 2010

В PHP несколько файлов могут работать вместе, используя include / require и их двоюродных братьев include_once / require_once. Позвольте мне продемонстрировать на примере. Вы можете разбить вещи на несколько файлов следующим образом; Поместите класс в файл с именем Message.php, который может выглядеть следующим образом:

<?php

class Message  {

    var $message; // A variable to store a list of messages

    // Return a string containing a list of messages found,
    function listMessages($delim = ' '){
        if (count($this->message) > 0){
            echo implode($delim,$this->message);
        }else{
            return false;
        }
    }

    // Manually add Message
    function addMessage($description){
        $this->message[] = $description;
    }       
}

?>

И включить его в другой файл, в тот же каталог с именем notification.php, который может выглядеть следующим образом.

<?php

require_once 'Message.php';

$message = new Message();

$message->addMessage('Article Title 1');
$message->addMessage('Article Title 2');

$message->listMessages();

?>
1 голос
/ 08 декабря 2010

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

Спасибо.

1 голос
/ 08 декабря 2010

Если вы хотите, чтобы эти сообщения были доступны для просмотра на всех страницах вашего сайта, вам нужно хранить их где-то постоянно. Все, что вы помещаете в переменную PHP, перестает существовать после каждого запроса страницы. Поместите сообщения в файл или базу данных и прочитайте их из базы данных при создании экземпляра объекта Message.

0 голосов
/ 08 декабря 2010

Хотя из вашего вопроса не совсем ясно, что может быть полезно следующее решение, но попробуйте вызвать последние четыре строки в файле footer (который есть на каждой странице), если он у вас есть ..

$message = new Message();

$message->addMessage('Article Title 1');
$message->addMessage('Article Title 2');

$message->listMessages();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...