Функция класса PHP не работает - PullRequest
0 голосов
/ 17 июня 2009

Я новичок в PHP и веб-скриптах в целом, так что это новый вопрос.

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

Вот код.

<?php
class product {
    var $ssProductName;
    var $ssVendorName;
    var $ssDescr;
    var $ssURI;

    // Clean constructor, strings must be cleaned before use
    function __construct($ssProd, $ssVendor, $ssD, $ssU) {
        $this->$ssProductName = $ssProd;
        $this->$ssVendorName = $ssVendor;
        $this->$ssDescr = $ssD;
        $this->$ssURI = $ssU;
    }

    // print a table of the values
    function DisplayOneEntry() {

        echo '<table border="1">
                    <tr>
                    <td>'.$this->$ssProductName.'</td>
                    <td>'.$this->$ssVendorName.'</td>
                    <td>'.$this->$ssDescr.'</td>
                    <td>'.$this->$ssURI.'</td>
                    </tr>
                    </table>';
    }

}

echo "<HTML>";
echo "A";
$newP = new product("Redhat", "Redhat corp", "Leader in", "www.redhat.com");
echo "B";
$newP->DisplayOneEntry();

echo "</HTML>";
?>

Но вывод просто:

<HTML>
A

Тогда больше ничего.

Это работает на хостинг-провайдере, использующем php 5.2.9 и Apache 2.2.

Ответы [ 4 ]

9 голосов
/ 17 июня 2009

Вам необходимо получить доступ к переменным-членам с помощью:

$this->variableName

Не:

$this->$variableName
3 голосов
/ 17 июня 2009
    $this->$ssProductName = $ssProd;

должно быть

    $this->ssProductName = $ssProd;

нет $ после ->

1 голос
/ 17 июня 2009

Синтаксис $this->$foo - это переменная , ссылающаяся на атрибут класса с именем значения $foo. Поэтому, если $foo имеет значение bar, $this->$foo будет ссылаться на $foo->bar, а не $this->foo.

Так что просто удалите $ после $this->, и оно должно работать.

0 голосов
/ 17 июня 2009

Это потому, что ваш скрипт php ошибочен. Чтобы отловить такие ошибки, вы должны запустить его на сервере отладки (с display_errors установленным на On) или использовать другие методы ведения журнала.

Однако основная проблема в том, что вы обращаетесь к членам объекта неверным способом; второго знака доллара нет Вместо

$this->$ssProductName = $ssProd;

использование

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