Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   Помогите Класс Php (https://forum.antichat.xyz/showthread.php?t=63162)

SSB1981 01.03.2008 14:26

Помогите Класс Php
 
Здравствуйте реши написать класс авторизации для сайта.
для начала решил вспомнить классы.

Вот элементарный класс:

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 код:

<?php

class test
{
var 
$v;
 function 
test()
{
    
$this->v='works';
}
}

$t=new test();
echo 
$t->v;
?>


>>для начала решил вспомнить классы.
может стоит не вспоминать а поучить?

SSB1981 01.03.2008 14:40

Погоди! Я открыл учебник вот код:

<?php

class Car
{
$gas=0;
function addGas($ammount)
{
$this->gas=$this->gas + $ammount;
echo "Â áàê çàëèòî $ammount ëèòðîâ áåíçèíà";
}
}

Тоже самое!
?>

Piflit 01.03.2008 15:19

PHP код:

//class
function test()
{
    return 
$this->v='works';

//class
...

$t=new test();
echo 
$t->test(); 

так правильнее?

bul.666 01.03.2008 15:32

PHP код:

<?php 

class test

    var 
$v 'HELLO'


$t=new test(); 
echo 
$t->v
?>

2Piflit у тебя название класса и функции совпадает, для отладки - очень вредно =)

Piflit 01.03.2008 15:43

Цитата:

Сообщение от bul.666
2Piflit у тебя название класса и функции совпадает, для отладки - очень вредно =)

это у них совпадает. я написал о другом.

DIAgen 01.03.2008 15:56

Цитата:

Сообщение от bul.666
[php]
2Piflit у тебя название класса и функции совпадает, для отладки - очень вредно =)

А чего вредно то?:) Посмотри ответ nc.STRIEM так и должно выглядеть...

bul.666 01.03.2008 15:59

Я к человеческому фактору...
В таком примере да, но при большем объеме кода совпадения в именах классов и функций доставят массу хлопот...

DIAgen 01.03.2008 16:12

Цитата:

Сообщение от bul.666
Я к человеческому фактору...
В таком примере да, но при большем объеме кода совпадения в именах классов и функций доставят массу хлопот...

Ну может быть... это было в 4 ветке, а в пятой это уже не так важно (http://www.php.net/manual/ru/language.oop5.php)...:)

nc.STRIEM 01.03.2008 16:32

Цитата:

Сообщение от bul.666
Я к человеческому фактору...
В таком примере да, но при большем объеме кода совпадения в именах классов и функций доставят массу хлопот...

мож я чет не допонимаю о чем ваше речь, но всеже, когданибудть слышал про конструктор?

Piflit 01.03.2008 16:37

Цитата:

Сообщение от nc.STRIEM
когданибудть слышал про конструктор?

у меня в детстве был Lego. ога

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

Евгений Минаев 01.03.2008 16:37

Кто ответит на вопрос без использования php получит респект от всех кто откроет тему, надеюсь на вашу честность, порой полезно себя проверить - "Что выведется в итоге?"

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->_;

?>


bul.666 01.03.2008 16:45

foo:foo

Хотя наверное

foofoo:foo

SSB1981 01.03.2008 16:47

Всем спаибо! Разобрался!
Оказывается нужно добовлять "public" пред именем пременной!

Helios 01.03.2008 16:52

Выведедся соообщение о доступе к закрытому свойству класса, а именно - $__s->_

Евгений Минаев 01.03.2008 16:55

Helios прав, выведется только fatal error тк обращаться к private переменным нельзя вне класса, а $__z->_ будет пуст

Macro 01.03.2008 16:57

Ссылка в тему...
http://ru2.php.net/manual/ru/language.oop5.visibility.php
Читал-читал и ничего не понял :) С ООП я не дружу

Helios 01.03.2008 17:16

Тут больше интересен не доступ к закрытым полям класса, а неудавшийся Паблик Морозов: в одном объекте $__z образуется две переменные с одним именем, но с разными уровнями доступа касательно "подобъектов", чтоли.
Вот по человечески:

Класс firstClass содержит переменную $_ с флагом private, т.е. доступ к ней имеют только методы данного класса и не более.

Класс secondClass тоже содержит переменную $_, но с флагом public. По идее, она должна редефайнить переменную в классе-родителе и наделять ее флагом public (классическое поведение Пабликов Морозовых).

Но не тут-то было.

Благодаря тому, что в firstClass использовался именно private, а не protected (private + доступ из классов-потомков), при инициализации secondClass происходит следующее:

1 инициализация firstClass, появляется private $_;
2 инициализация secondClass, который не имеет доступа к firstClass::_, потому делает себе вторую переменную public $_.

При этом функция setValue имеет влияние не над public secondClass::_, а над private firstClass::_;

Помнится подобная ситуация наблюдается в сях, только там дело касалось указателей на классы и лечилось методами с модификатором virtual


Время: 08:15