Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > private $_name


Автор: supervladislav 18.4.2009, 23:07
существует код 
подскажите ,если к свойству используется метод инкапсуляции private 
то мне непонятно где нельзя его использовать ,ну по отноршению к чему,
К текущим функциям???
Почему  надо писать и в каких методах 
Код

return $this->_name


зачем это писать ,в каких методах?
что значит
Код

print "hello " {this->getName()!};

Код

ссылка на результат метода getname
<?php
class Demo{
private $_name;
public function sayHello(){ 
print "hello " {this->getName()!};
}
public function getname(){ 
print "hello " {this->getName()!};
return $this->_name;
}
public function setName($name){
if(!is_string($name) || strlean($name)==0){
throw new Exception("нельзя");
}
$htis->_name=$name;
}

}
?>


Автор: bars80080 18.4.2009, 23:42
Цитата(supervladislav @  18.4.2009,  23:07 Найти цитируемый пост)
Почему  надо писать и в каких методах 

по той же причине, по какой надо писать любую переменную. т.е. когда угодно

Цитата(supervladislav @  18.4.2009,  23:07 Найти цитируемый пост)
подскажите ,если к свойству используется метод инкапсуляции private 
то мне непонятно где нельзя его использовать ,ну по отноршению к чему,


это значит, что для:

Код

$myc = new Demo();

$myc->_name = ''; // - даст ошибку

т.к. свойство видно только изнутри класса
т.е. если внутри свойства написано $this->_name то проблем не будет


Автор: supervladislav 19.4.2009, 00:01
я имел ввиду ,я несовсем понимаю )))как правильно использовать свойства почему 
Код

<?php
class Demo{


 publick $name;
function sayhello(){
print "hello $this->name!";
}
}
?>


зачем нужно 
Код

$this->name!";

а можно сразу определить переменную $name ,тоесть задать ей значение???
А  если методов и свойств много ???
почему для вызова методов и свойств используется один и тотже лексикон 
Код

<?php
require_once("class.Demo.php");
$obDemo=new Demo();
$objdemo->name=''dsdsd';
$objanotherdemo=new Demo();
$objanotherdemo->name='ed';
$objDemo->sayHello();
$objanotherdemo->sayhello();



?>

непонимаю в чём раздница в выше приведённом коде


Автор: bars80080 19.4.2009, 00:15
Цитата(supervladislav @  19.4.2009,  00:01 Найти цитируемый пост)
а можно сразу определить переменную $name ,тоесть задать ей значение???

дык, а какая у тебя задача? почему ты не задаёшь ей значение сразу?

Код

require_once("class.Demo.php");
$obDemo=new Demo();
$objdemo->name='dsdsd';
$objanotherdemo=new Demo();
$objanotherdemo->name='ed';
$objDemo->sayHello();
$objanotherdemo->sayhello();

во-первых, надобно бы пользовать тот код который пишешь, а не переспрашивать на форуме. неужели наблюдая за разным поведением не сможешь сделать выводов?
для приведённого класса понятное дело они одинаковы, коль поставил public для свойства. но спрашивал изначально про private. зачем за нос водишь?

Автор: pizzz 19.4.2009, 07:48
Зачем нужно $this-> ?

Ну вот представьте у Вас 1 класс, и 3 обьекта этого класса. И у каждого обьекта определано свое свойство name. 

Подумайте, почему названно ОБЕКТНО-ОРЕНТИРОВАННОЕ-ПРОГРАММИРОВАНИЕ а не КЛАССО-ОРЕНТИРОВАННОЕ-ПРОГРАММИРОВАНИЕ

Добавлено через 5 минут и 15 секунд
class Demo {
     public name;
     __construct ($a) {
         $this->name=$a;
    }

}

Создавая обьект в классе можно указать код, который будет выполнен при создание обьекта. 
То есть 

$a = new Demo("ПРивет мир!!!");
$b = new Demo("Пока мир!!!");

echo $a->name;
echo $b->name;

Выведет:
ПРивет мир!!!
Пока мир!!!

Добавлено через 7 минут и 51 секунду
P.s. Задавайте вопросы четче. Будете получать ответы получше smile

Автор: supervladislav 19.4.2009, 13:33
зачем обязательно возвращать значение свойств в метод ,у меня во всех примерах так ))))
можно значения свойств вызвать без возврата в метод ,и можно ли определить сразу в классе значения свойств 

Автор: pizzz 19.4.2009, 14:00
Если честно нифига не понятно. Хотите чтобы Вам помогли? Задавайте вопросы правильно. 

Да в классе можно определить значения

Автор: supervladislav 19.4.2009, 14:16
Сейчас попробую.Скажите можно свойство вызвать без вот этого
Код

$this->name!";

обязательно значения свойств возвращать в метод ,можно свойство вызвать без этого

Автор: bars80080 19.4.2009, 21:19
Цитата(supervladislav @  19.4.2009,  14:16 Найти цитируемый пост)
!"

что это за хрень? и почему у вас не пишется ошибка в этом коде?


Цитата(supervladislav @  19.4.2009,  14:16 Найти цитируемый пост)
обязательно значения свойств возвращать в метод ,можно свойство вызвать без этого 

да не нужно ничего делать. делайте что хотите. хотите чтобы свойство было доступно вне класса, делайте его public, не хотите - делайте private. если оно public, то значение свойства вы можете установить без всяких методов, просто присвоив ему значение:

Код

$myc = new MyClass();
$myc->name = 'slon';


всё. какие тут непонятки?

Автор: supervladislav 19.4.2009, 22:54
ясно )))А ещё обязательно задавать методы инкапсуляции для методов ,в каком случае это нужно )))
если класс будет  public То и всё внутри него тоже будет public или нет?

Добавлено через 36 секунд
у меня так напсиано в книге 

Автор: Kirsan 19.4.2009, 23:21
Класс есть класс, он не Private и не Public.
Инкапсуляция нужна для того, чтобы максимально абстрагировать класс, оставляя доступным только интерфейс и пряча внутрь все вспомогательные методы и свойства.
Почитайте литературу по ООП. Там это всё объясняется. Начиная с того, что ООП - это не какая-то непонятная фича PHP, а парадигма программирования.

Автор: bars80080 20.4.2009, 09:40
Цитата(supervladislav @  19.4.2009,  22:54 Найти цитируемый пост)
 задавать методы инкапсуляции для методов 

ничего не понял.... методы для методов?


Цитата(supervladislav @  19.4.2009,  22:54 Найти цитируемый пост)
если класс будет  public 

а где это вы видели, чтобы целому классу назначалось private или public? только методам и свойствам внутри класса

Автор: supervladislav 20.4.2009, 15:22
Я читал ,что такое ооп))))я  не очень понимаю  как работают методы инкапсуляции)))
если функция  имеет метод public  к нему  можно будет обратиться из любой части кода так ,а если он будет он private  то только в пределах этого класса 
тоесть это как вы могли бы дать пример пожалуйста.
   

Автор: pizzz 20.4.2009, 15:34
class Demo () {
   private $pr;
   public   $pu;
}


$obj = new Demo ();

echo $obj->pr; // Вернет ошибку.
echo $obj->pu; // выведеться нормально

Автор: IZ@TOP 21.4.2009, 15:38
Почему-то, у меня стойкое ощущение, что данный топик скорее относится к фундаментальным основам ООП, а не профессиональной разработке на PHP.

Автор: supervladislav 21.4.2009, 19:10
pizzz, а где тогда можно использовать свойство  private $pr;
только в методах ,так ???

Автор: SureGOOD 22.4.2009, 00:48
да уж...что-то мне тоже подсказывает, что стоит перенести тему) заодно и новички почитают)

supervladislav

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

Автор: supervladislav 22.4.2009, 16:09

SureGOOD, спасибо извените что не в тот раздел.
и последний вопрос ,чем отличается метод private от метода protected ))))
А если методу задан private , можно будет использовать только рекурсию что ли так.
Я вас очень прошу скажите я непонимаю.

Автор: skyboy 22.4.2009, 19:56
private метод можно вызывать только из методов объекта того же класса - "извне" и из методов классов-потомков этот метод не должен быть доступен.
protected метод может быть доступен в методах того же класса и классов-потомков, но недоступен "извне" класса.
public метод доступен отовсюду.
http://ua.php.net/private, и значение - соответствующее.

Автор: supervladislav 22.4.2009, 21:27
Извените ещё один вопрос а ,методы классов-потомков это  объекты внутри какого-то метода внутри класса так?

Автор: Kirsan 22.4.2009, 21:40
Методы классов-потомков - это методы тех классов, которые наследуются от данного.
Вы точно читали про ООП?

Автор: supervladislav 22.4.2009, 22:15
я читал но не всё понял )))вот и спрашиваю_)))))
тоесть если класс внутри какогото метода класса так 

Автор: bars80080 22.4.2009, 23:15
Цитата(supervladislav @  22.4.2009,  22:15 Найти цитируемый пост)
тоесть если класс внутри какогото метода класса так  

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

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

Автор: supervladislav 22.4.2009, 23:36
могли бы вы привести пример ???

Автор: bars80080 22.4.2009, 23:52
Код

<?php
class Parent {

    function parent_funct() { 
        echo "<h1>Это родительская функция</h1>";
    }
    
    function test () { 
        echo "<h1>Это родительский класс</h1>"; 
    }
}

class Child extends Parent {

    function child_funct() { 
        echo "<h2>Это дочерняя функция</h2>"; 
    }

    function test () { 
        echo "<h2>Это дочерний класс</h2>"; 
    }
}

$object = new Parent();
$object1 = new Child();

$object->parent_funct(); // Выводит 'Это родительская функция'
$object->test(); // Выводит 'Это родительский класс'

$object1->parent_funct(); // Выводит 'Это родительская функция'
$object1->child_funct(); // Выводит 'Это дочерняя функция'
$object1->test(); // Выводит 'Это дочерний класс'
?>

Автор: supervladislav 23.4.2009, 00:27
а какой из классов  нужно ну приобразовать в объект через new ))))
тоесть насколько я понимаю методы класса parent передались классу child --
так?
А принципиально название функции и класса ,ну  необязательно чтобы они были схожего названия 
АА тоесть получается ,что класс child евляется потомком ,правильно?

И последнее надеюсь скажите для чего нужна функция _CONSTRUCT()

Автор: supervladislav 23.4.2009, 00:44
да  а вот ещё а если классы в раздных файлах тогда что???

Автор: enof 23.4.2009, 07:03
Цитата(supervladislav @  23.4.2009,  01:27 Найти цитируемый пост)
И последнее надеюсь скажите для чего нужна функция _CONSTRUCT() 

Это конструктор, метод класса, который автоматически выполняется при создании объекта.
Код

<?php
class cls
{
    public $age;
    public $name;
    public function __construct($age, $name)
    {
        $this->age = $age;
        $this->name = $name;
        echo "В конструкторе класса cls<br>";
    }
}

$obj = new cls(23, "Василий"); //При создании объекта передаем в конструктор необходимые параметры.
echo $obj->name ." - ".$obj->age." года";


Добавлено через 59 секунд
Цитата(supervladislav @  23.4.2009,  01:44 Найти цитируемый пост)
да  а вот ещё а если классы в раздных файлах тогда что??? 

include, include_once, require_once, require - подключаете нужный файл любым способом и все.

Автор: bars80080 23.4.2009, 09:40
Цитата(supervladislav @  23.4.2009,  00:27 Найти цитируемый пост)
а какой из классов  нужно ну приобразовать в объект через new ))))
класс никуда не преобразуется. класс - это своего рода описание возможного объекта, набор правил, с помощью которых можно работать. это типа технической документации на автомобиль, но самого объекта - автомобиля, ещё не существует.

только когда мы пишем:

$per = new SomeClass();

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

Цитата(supervladislav @  23.4.2009,  00:27 Найти цитируемый пост)
А принципиально название функции и класса ,ну  необязательно чтобы они были схожего названия 
нет, как хотите так и называйте (в пределах синтаксиса конечно)

Цитата(supervladislav @  23.4.2009,  00:27 Найти цитируемый пост)
АА тоесть получается ,что класс child евляется потомком ,правильно?
да

Цитата(supervladislav @  23.4.2009,  00:27 Найти цитируемый пост)
И последнее надеюсь скажите для чего нужна функция _CONSTRUCT() 
это всего лишь первый метод, который вызывается в момент создания объекта. когда мы пишем 
$per = new SomeClass();
то если есть метод public function __construct() в классе, то он срабатывает

Цитата(supervladislav @  23.4.2009,  00:44 Найти цитируемый пост)
да  а вот ещё а если классы в раздных файлах тогда что??? 

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

Автор: supervladislav 23.4.2009, 10:05
так а в каких случаях надо писать метод _construct

Автор: bars80080 23.4.2009, 10:26
хочешь - пиши, не хочешь, не пиши

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)