OOP (Носачев 31.03)
Имя класса с большой буквы. Свойство- переменная; метод- это функция. В свойство – необязательно задавать значение какое-то. Экземпляр класса создается с помощью “ new ”
Class Cat {
Public $name;
Public $color;
Public $voice;
}
New Cat();
Var_dump(new Cat());
Получаем обьект:
Создаем обьект: (по сути переменная)
$kitty= new Cat();// переменная типа обьекта или екземпляр класса или обьект
$kitty->свойство='значение';//свойства без $
$kitty->name=’vasya‘; //инициализация
$kitty->tail=’vasya‘;//позваоляеться динамическое создание НО не надо
В сл обьекте унаследованием естесвенно не будет tail
Методы создаеться по стандарту паблик(но его лучше всегда писать)
Class Cat {
Public $name;
Public $color;
Public $voice;
Public Function say($text){
Echo “$text”;
}
}
Доступ к методу как к функ-ции
$kitty->say(«birma»);//birma
В данным случае аргумент к методу должен быть иначе будет варнинг(аргумент введите) и затем замечание (не обьявленная переменная)
Class Animal {
Public $name= значение по умолчанию;
Public $color;
Public Function say(){
Echo $ this ->name; // в контексте какого обьекта дёрнуть(вот етого обьекта,который вызвал)
}
}
$this –дёрнуть значение свойства из обьекта
$kitty=new Animal();//создали обьект
$kitty->name=”murka; // присвоили свойству name значение murka
$kitty ->say(); //murka //в обьекте $kitty значение name
Наследование
Class Animal {
Public $name= значение по умолчанию;
Public $color;
Public Function say(){
Echo $ this ->name;
}
Class Cat extends Animal {
Public $voice=”meow”;
}
Class Dog extends Animal {
Public $voice=”gav”;
}
В классе Dog и Cat есть все что и в Animal.Поменялись в их только значение по умолчанию свойства voice
$dog=new Dog();
$kitty=new Cat();
Проверка унаследован ли..instanceof
If ($kitty instanceof Cat){тело}
__construct() и __destruct()
__construct()-в момент создание обьекта; new User().Если есть аргумент то при создании обьекта нужно передать аргумент
|
__destruct() –в момент уничтожения (при завершении)
class User{public $login;
public $age;
public function __construct($name)
{
$this->login=$name;
echo "created <br>";
}
public function __destruct()
{
echo "deleted <br>";
}
public function getInfo(){
echo "$this->age <br>";
}
}
$user1= new User('vasya');
$user2= new User('dima');
$user2->age=25;
var_dump($user1,$user2);
$user2->getInfo();
Выведет:
Унаследование + изменить метод
Parent:: name метода() -обращаюсь к родителю
class moderator extends User{public $type;
public function __construct($name,$age,$type)
{
parent:: __construct ($name);///я обращаюсь к родителю(унаследую)
$this->age=$age;
$this->type=$type;
}
public function getInfo(){
parent:: getInfo ();
echo "$this->login <br>";
echo "$this->type <br>";
}
}
$user3= new moderator('admin',45,'administrator');
$user3->getInfo();
выведет:
created
created
created
45
admin
administrator
deleted
deleted
deleted
Example:
Class Ganget{public $color;
public $model;
public $size;
public function call(){
if ($this->type){
echo 'true';
} else {
echo 'false';
}
}
}
class Notebook extends Ganget{
public $type= true;
}
class Smartphone extends Ganget{
public $type= false;
}
$notebook= new notebook();
$notebook->call();
$smart= new smartphone();
$smart->call();
//true
//false
Конец Носачев 31.03.16
Начало Носачев 05.04.16
Доступ к свойствам и методам класса, объявленным как public (общедоступный), разрешен отовсюду. Модификатор protected (защищенный) разрешает доступ наследуемым и родительским классам. Модификатор private (закрытый) ограничивает область видимости так, что только класс, где объявлен сам элемент, имеет к нему доступ.(и он не наследуеться)
Для получение доступа используеться set(установка значения) get(получение).Получение константы можно через метод get(::self) или NameClass::CONST(name).
Self:: -обращение к своему класу к своей константы внутри
,прмиер:
Class Human{private $brains= true;
protected $blood="red";
const HANDS ="TWO";
public function getConstant(){
echo self:: HANDS;
}
public function setBrains($n){
$this->brains=$n;
}
public function getBrains(){
return $this->brains;
}
|
}
echo Human:: HANDS;//TWO
$mike= new Human();
$mike->getConstant();//TWO
$mike->setBrains('genious');
echo $mike->getBrains();//genious
Как видим – выведет TWOTWOgenious
Менять константы можно в дочерных(унаследованных)классов, но допишим код:
class Women extends Human{const HANDS ="Three";
}
$woman= new Women();
$woman->getConstant();//TWO
echo Women:: HANDS;//Three
__autoload(),
которая будет автоматически вызвана при использовании ранее неопределенного класса или интерфейса. Вызов этой функции - последний шанс для интерпретатора загрузить класс прежде, чем он закончит выполнение скрипта с ошибкой.
function __autoload($class_name) {
include $class_name. '.php';
}
STATIC
Class HumanStatic{
static $cnt;
public function __construct()
{
echo 'Создан обьект '.++ self:: $cnt;
}
}
$sanya= new HumanStatic();//Создан обьект 1
$sanya1= new HumanStatic();//Создан обьект 2
$sanya2= new HumanStatic();//Создан обьект 3
Пример 2:для хранение настоек
class Config{static $props =[];
static function setConfig($n,$v){
self:: $props [$n]=$v;
}
static function getConfig($n){
return self:: $props [$n];//по ключу получаем значение
}
}
Config:: setConfig ('1','kolya');
echo Config:: getConfig ('1');// kolya
Нюансы: static в PHP существуют в контексте классов, а не объектов.
class A {
public function foo () {
static $x = 0;
echo ++$x; }
}
class B extends A {
}
$a1 = new A;
$b1 = new B;
$a1->foo(); // 1
$b1->foo(); // 1
$a1->foo(); // 2
$b1->foo(); // 2