Просмотр полной версии : Помогите Класс Php
Здравствуйте реши написать класс авторизации для сайта.
для начала решил вспомнить классы.
Вот элементарный класс:
<?php
class test
{
$this->v='works';
}
$t=new test();
echo $t->v;
?>
На экране отображается следующее:
Parse error: syntax error, unexpected T_VARIABLE, expecting T_FUNCTION in Z:\home\ssb1981.ru\www\Test\class.php on line 5
Стоит Denwer 3.
nc.STRIEM
01.03.2008, 14:31
инициализировать переменные в теле класса можно только функциях, и конструктор тоже обязателен, и обявлять пременные тоже надо
<?php
class test
{
var $v;
function test()
{
$this->v='works';
}
}
$t=new test();
echo $t->v;
?>
>>для начала решил вспомнить классы.
может стоит не вспоминать а поучить?
Погоди! Я открыл учебник вот код:
<?php
class Car
{
$gas=0;
function addGas($ammount)
{
$this->gas=$this->gas + $ammount;
echo "Â áàê çàëèòî $ammount ëèòðîâ áåíçèíà";
}
}
Тоже самое!
?>
//class
function test()
{
return $this->v='works';
}
//class
...
$t=new test();
echo $t->test();
так правильнее?
<?php
class test
{
var $v = 'HELLO';
}
$t=new test();
echo $t->v;
?>
2Piflit у тебя название класса и функции совпадает, для отладки - очень вредно =)
2Piflit у тебя название класса и функции совпадает, для отладки - очень вредно =)
это у них совпадает. я написал о другом.
[php]
2Piflit у тебя название класса и функции совпадает, для отладки - очень вредно =)
А чего вредно то?:) Посмотри ответ nc.STRIEM так и должно выглядеть...
Я к человеческому фактору...
В таком примере да, но при большем объеме кода совпадения в именах классов и функций доставят массу хлопот...
Я к человеческому фактору...
В таком примере да, но при большем объеме кода совпадения в именах классов и функций доставят массу хлопот...
Ну может быть... это было в 4 ветке, а в пятой это уже не так важно (http://www.php.net/manual/ru/language.oop5.php)...:)
nc.STRIEM
01.03.2008, 16:32
Я к человеческому фактору...
В таком примере да, но при большем объеме кода совпадения в именах классов и функций доставят массу хлопот...
мож я чет не допонимаю о чем ваше речь, но всеже, когданибудть слышал про конструктор?
когданибудть слышал про конструктор?
у меня в детстве был Lego. ога
это зависит от того, надо ему автоматом задавать значения атрибутов сразу при создании объекта или нет.
Евгений Минаев
01.03.2008, 16:37
Кто ответит на вопрос без использования php получит респект от всех кто откроет тему, надеюсь на вашу честность, порой полезно себя проверить - "Что выведется в итоге?"
<?php
class firstClass
{
private $_;
function setValue ( $value ) {
$this->_ = $value;
}
}
class secondClass extends firstClass
{
public $_;
}
$__s = new firstClass();
$__z = new secondClass();
echo $__s->setValue( 'foo' );
echo $__z->setValue( 'foo' );
echo $__z->_ . ':' . $__s->_;
?>
foo:foo
Хотя наверное
foofoo:foo
Всем спаибо! Разобрался!
Оказывается нужно добовлять "public" пред именем пременной!
Выведедся соообщение о доступе к закрытому свойству класса, а именно - $__s->_
Евгений Минаев
01.03.2008, 16:55
Helios прав, выведется только fatal error тк обращаться к private переменным нельзя вне класса, а $__z->_ будет пуст
Ссылка в тему...
http://ru2.php.net/manual/ru/language.oop5.visibility.php
Читал-читал и ничего не понял :) С ООП я не дружу
Тут больше интересен не доступ к закрытым полям класса, а неудавшийся Паблик Морозов: в одном объекте $__z образуется две переменные с одним именем, но с разными уровнями доступа касательно "подобъектов", чтоли.
Вот по человечески:
Класс firstClass содержит переменную $_ с флагом private, т.е. доступ к ней имеют только методы данного класса и не более.
Класс secondClass тоже содержит переменную $_, но с флагом public. По идее, она должна редефайнить переменную в классе-родителе и наделять ее флагом public (классическое поведение Пабликов Морозовых).
Но не тут-то было.
Благодаря тому, что в firstClass использовался именно private, а не protected (private + доступ из классов-потомков), при инициализации secondClass происходит следующее:
1 инициализация firstClass, появляется private $_;
2 инициализация secondClass, который не имеет доступа к firstClass::_, потому делает себе вторую переменную public $_.
При этом функция setValue имеет влияние не над public secondClass::_, а над private firstClass::_;
Помнится подобная ситуация наблюдается в сях, только там дело касалось указателей на классы и лечилось методами с модификатором virtual
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot