Jump to content
  • 0

Изучаю PHP


Great Rash
 Share

Question

Добрый вечер!

Я отчаялся установить Apache и PHP по отдельности (ну никак не хотели работать). Скачал себе пакет AppServ (установил его без проблем) и засел за изучения PHP.

Сразу оговорюсь, что базовые знания этого языка у меня имеются. Я как то раз даже интернет-магазин написал самостоятельно. Но умел я программировать только процедурным методом, да и знал язык плохо. И вот теперь хочу засесть за изучение языка основательно.

Купил себе книгу под названием "PHP Практика создания WEB-сайтов", авторы Максим Кузнецов и Игорь Семдянов, издание второе. Книга толстая - 1244 страницы, так что должно быть освящено все достаточно подробно. Выбор на эту книгу пал из-за того, что первая же глава сразу начинается с изучения ООП, ну и вообще оглавление крайне понравилось - никакой воды, лишь необходимая инфа.

Кого книга вдруг заинтересовала тут можно позырить на нее.

Но случилась неприятность - застрял практически сразу же. Изучаю параграф про инкапсуляцию и для начала там приводится вот такой листинг:

<?php
class Employee {
public $surname;
public $name;
public $patronymic
private $age;
}
?>

Потом рассматривается обращение к членам класса Employee:

<?php
require_once("classes/class.employee.php");

$emp = new Employee();

$emp->surname = "Пупкин";
$emp->name = "Василий";
$emp->patronymic = "Петрович";

echo $emp->surname." ".$emp->name." ".$emp->patronymic;
?>

И тут (опачки) вместо ожидаемого Пупкина Василия Петровича у меня на выходе вот такая ошибка:

Parse error: syntax error, unexpected T_PRIVATE, expecting ',' or ';' in D:\AppServ\www\lessons\classes\class.employee.php on line 6

Что это все это значит? При чем тут запятая или точка с запятой? Проблема в книге, в моих кривых руках или в настройках PHP?

phpinfo.php показывает, что у меня PHP Version 5.2.6.

Link to comment
Share on other sites

Recommended Posts

  • 0

Great Rash, не делайте из мухи слона.

class User
{
protected $_name;

public function __construct($name)
{
$this->_name = $name;
}

public function __toString()
{
return $this->_name;
}
}

$greatRush = new User('Great Rush');
echo $greatRush; //И это вся суть метода __toString()

В общем в яваскрипте аналогов нет.

.toString()

Link to comment
Share on other sites

  • 0

Там кода строк 200 :) . Как перепечатаю с книги сразу скину. Только там код не работает т.к. это абстрактный класс и все его методы будут перегружены в производных классах. Точно кидать?

LokiDi L0ck, спасибо за объяснение. Он в яваскрипте оказывается не явный... да и не совсем так работает... Т.е. все что вернет метод __toString() будет напечатано при вызове echo $Объект?

Link to comment
Share on other sites

  • 0
Он в яваскрипте оказывается не явный... да и не совсем так работает

Работает аналогично, вы так говорите лишь от временного отсутствия опыта.

Т.е. все что вернет метод __toString() будет напечатано при вызове echo $Объект?

Не только. При приведении к строке, например: (string) $greatRush

Link to comment
Share on other sites

  • 0
Работает аналогично, вы так говорите лишь от временного отсутствия опыта.

Ну не совсем аналогично, т.е. на javascript.ru написано, что если я вызываю alert(d);, то на самом деле у меня вызывается alert(d.toString());, т.е. получается, что метод вызывается сам собой, а в PHP его надо самому реализовывать.

В общем теперь все окончательно ясно. Спасибо за помощь!

Link to comment
Share on other sites

  • 0

Как проверить существование переменной?

Есть некая переменная $_POST['a'], мне надо написать проверку что если ее нет, то пишем одно, а если есть то пишем другое. Пишу:

if (!$_POST['a']) {
echo 'одно';
} else {
echo 'другое';
}

но фишка в том, что эта переменная может принимать значение 0 и в этом случае мне надо чтобы срабатывало условие else.

Что-то я никак не пойму как условие написать, все время if срабатывает.

Link to comment
Share on other sites

  • 0
Как проверить существование переменной?

Есть некая переменная $_POST['a'], мне надо написать проверку что если ее нет, то пишем одно, а если есть то пишем другое. Пишу:

if (!$_POST['a']) {
echo 'одно';
} else {
echo 'другое';
}

но фишка в том, что эта переменная может принимать значение 0 и в этом случае мне надо чтобы срабатывало условие else.

Что-то я никак не пойму как условие написать, все время if срабатывает.

if (isset($_POST['a']!=0)) 
{
echo 'одно';
}
else
{
echo 'другое';
}

вроде так, но в синтаксисе могу ошибаться...

к стати вполне возможно что переменную $a нужно еще приравнять к суперглобальному массиву.

Edited by rus
Link to comment
Share on other sites

  • 0

sigma77

А если сделать наоборот. В синтаксисе php пока не сильна но смысл следующий

Если перемненной не существует или она равна 0 {echo 'одно';}

else {echo 'другое';}

В том то и дело, что если в массиве элемента такого нет, то надо делать одно, а вот если есть и он равен 0, то другое.

rus, Veseloff спасибо за инфу, буду пробовать.

Link to comment
Share on other sites

  • 0
sigma77

В том то и дело, что если в массиве элемента такого нет, то надо делать одно, а вот если есть и он равен 0, то другое.

rus, Veseloff спасибо за инфу, буду пробовать.

Т.е. у тебя три варианта действий?

1) Переменная существует и она не равна нулю - действие №1.

2) Переменная существует и она равна нулю - действие №2.

3) Переменная не существует - действие №3.

Такая логика?

Link to comment
Share on other sites

  • 0
В том то и дело, что если в массиве элемента такого нет, то надо делать одно, а вот если есть и он равен 0, то другое.

if (!isset($_POST['a']))
echo "Не существует вообще";
elseif($_POST['a']===0)
echo "Переменная равна нулю";

Как-то так, не?

Link to comment
Share on other sites

  • 0
А может кто-нибудь объяснить на пальцах для чего нужна функция __toString()? А то я что-то два туториала уже прочитал и нифига не понял...

http://ua2.php.net/manual/en/language.oop5.magic.php

js сам питается преобразовать объект в строку, в пхп данный метод определяется пользователем

Edited by Mot
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy