//面向对象三大特性
//一、封装
//目的:让类更加安全,不让外界直接访问类里面的成员变量
//做法:1.把成员变量变成私有
// 2.做一个方法来实现变量的取值或赋值,在里面加限制条件
//使用类里面提供的魔术方法也可以实现对私有成员的操作
//__set方法
//特点:会自动执行,把赋值语句中的变量名作为第一个参数,把变量值作为第二个参数调用
//__get方法
//特点:会自动执行,把取值语句中的变量名作为参数调用
//$r->setage=20;
//$r->__set("name","张三");
$r->name="李四"; //执行语句会自动调用__set方法
$r->sex="女"; //每一个成员都可以使用
$r->age="100";
var_dump($r);
<?php
//类:由众多对象抽象出来的
//对象:通过类实例化出来的
//定义类:
class Info
{
const p = 3.1425926; //将某些类里面常用到的东西定义为常量,方便使用
public static $class; //static关键字定义静态的
public $code;
protected $name;
private $sex;
static function Test() //静态方法
{
echo self::$class; //调用自身类里面的静态成员
echo "静态方法!";
}
function __construct($s)
{
$this->sex = $s;
}
function Say()
{
echo self::$class; //普通方法里面可以调用静态成员
echo "hello";
}
function GetSex()
{
return $this->sex;
}
function SetSex($s)
{
$this->sex = $s;
}
function __set($n,$v)
{
$this->$n = $v;
}
function __get($n)
{
return $this->$n;
}
}
//对象实例化
$r = new Info("女");
$r->code = "join";
$r->sex;
/*Info::$class = "0305";
$r->Say();*/
/*Info::$class = "0305"; //访问静态成员
Info::Test();*/
//三大特性
//封装:
//目的:为了让类更加安全,避免外界直接访问成员变量
//做法:1.把成员变量变为私有的
//2.通过方法(函数)来间接的操作成员变量
//继承
//概念:如果一个类有子类,那么该子类会继承父类的一切东西(私有成员访问不到)
//在定义子类的时候需要加一个关键字:extends
//特点:单继承,一个儿子只能有一个父亲,一个类只能有一个父类
//如果父类中有构造函数,子类在实例化的时候要按照父类构造函数的标准来实例化
//子类对父类方法的重写:在子类中写一个同样的方法
//final:用来修饰类,代表该类是一个最终类,该类无法被继承
/*class Test extends Info
{
public $birthday;
function Run()
{
echo "run";
}
function Say()
{
parent::Say(); //调用父类的Say()方法
echo "Test Say";
}
}
$t = new Test("女");
$t->code = "p001";
//echo $t->sex;
$t->Say();
//$t->Run();*/
//静态成员
//类里面的普通成员是属于对象的,不是属于类的(调用的时候是用对象调用)
//什么叫做静态的:类静态成员是属于类的,不是属于每个对象的
//定义静态成员用static关键字修饰
//静态方法里面无法调用普通成员
//静态方法可以调用静态成员,使用self关键字来调用
//self代表该类,$this代表该对象
?>
<?php
class Ren
{
public $name;
public $sex;
function Say()
{
echo "hello";
}
/* function Say($a)
{
echo $a."hello";
}
function Say($a,$b)
{
echo $a.$b."hello";
}*/
function __tostring() //可以输出类的一些描述
{
return "这个对象包含变量name和sex,一个Say方法";
}
function __clone() //对象克隆的时候自动执行
{
$this->name="李四"; //$this指复本(克隆出来的新对象)
}
}
class China extends Ren
{
function Say()
{
echo "你好";
}
}
//多态
//概念:当父类引用指向子类实例的时候,由于子类对父类函数进行了重写,导致我们在使用该引用去调用相应的方法表现出的不同
//条件:1.必须有继承
//2.子类必须要对父类的方法进行重写
/*$r = new Ren();
echo $r;*/
/*$r = new Ren(); //$r代表Ren类的引用
$r1 = new China(); //$r1代表China的引用*/
//Ren $r = new America();
//$r->Say();
//函数重载
//条件:1.函数名必须相同
//2.函数里面参数的个数不同
//如果个数相同,类型不同
/*$r = new Ren();
$r->Say();*/
//php是弱类型语言,所以没有重载
//php有可变参数的函数
//__tostring()方法
//对象的克隆
/*$r = new Ren();
$r->name = "张三";
$r1 = clone $r; //克隆对象
echo $r->name;
echo $r1->name;*/
//var_dump($r1);
?>