Проверка унаследован ли..instanceof




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

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2017-06-11 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: