demo1
<?php
//OOP基本步骤
// 1.创建类
class Demo1{
//2.添加类成员
//在类中的变量和函数,和程序中的变量与函数有区别,添加了访问限制符
//变量=>属性,函数=>方法,访问限制符 成员
//创建属性
public $name = '张三';
public function getName(){
$obj = new Demo1();
return $obj->name;
}
}
//3.访问类成员
$obj = new Demo1();
//访问属性,对象成员访问符:->
echo $obj->name;
echo $obj->getName();
demo2
<?php
// 1.创建类
class Demo2{
//2.添加类成员
public $name = '张三';
public $age = 25;
public function getName(){
//第一步:类的实例化:self是类名的引用,始终与当前的类名绑定
return $this->name;
}
public function getAge(){
return $this->age;
}
}
//3.访问类成员
$obj = new Demo2();
echo $obj->name;
echo $obj->getAge();
demo3
<?php
//1.创建类
class Demo3{
//2.添加类成员
public $name;
public $age;
public function getInfo(){
return '我是'.$this->name.',今年'.$this->age.'岁';
}
//构造方法:类实例的初始化,自动完成在类实例中创建过程中的操作
public function __construct($name,$age){
//1.初始化类成员
$this->name = $name;
$this->age = $age;
//在类实例话是会被自动执行
echo $this->getInfo();
}
}
//3.访问类成员
new Demo3('张三',25);
demo4
<?php
//访问控制,实现类的封装
//1.创建类
class Demo4{
//2.添加类成员
public $name;
//如果不想让该属性在类的外部被访问,可以将该属性的访问控制符修改为:
//private 私有成员 protected 受保护成员
protected $age;
public function getInfo(){
return '我是'.$this->name.',今年'.$this->age.'岁';
}
//构造方法
public function __construct($name,$age){
$this->name = $name;
$this->age = $age;
}
//外部无权访问,是为了防止非法访问,并不代表禁止访问
//为这样的属性创建一个访问器方法,来过滤用户的访问请求
public function getAge(){
//仅允许用户是‘admin’的用户访问,其他访问返回:无权访问
$user = $_GET['user']??'';
if (isset($user)&&$user==='admin'){
return $this->age;
}else{
return '无权访问';
}
}
public function getRole(){
return isset($this->role)?$this->role:'不存在该属性';
}
//魔术方法:__get($name)属性重载
public function __get($name){
//仅允许用户是‘admin’的用户访问,其他访问返回:无权访问
$user = $_GET['user']??'';
if (isset($user)&&$user==='admin'){
return isset($this->name)?$this->name:'属性未定义';
}else{
return '无权访问';
}
}
}
//3.访问类成员
$obj = new Demo4('张三',25);
echo $obj->name;
echo $obj->role;
demo5
<?php
//类的继承
//1.创建类
class Demo5{
//2.添加类成员
public $name;
protected $age;
public function getInfo(){
return '我是'.$this->name.',今年'.$this->age.'岁';
}
//构造方法
public function __construct($name,$age){
$this->name = $name;
$this->age = $age;
}
}
class Demo5_1 extends Demo5{
//当前自雷的自身属性
private $sex;
public function __construct($name, $age,$sex){
parent::__construct($name, $age);
$this->sex = $sex;
}
//重写父类中的方法
public function getInfo(){
return parent::getInfo().',性别是:'.$this->sex;
}
}
//3.访问类成员
$obj = new Demo5_1('张三',25,'男');
echo $obj->getInfo();
demo6
<?php
//trait:代码复用方式,用来扩展当前类的功能
//trait:当成一个公共方法库
//trait:使用了类的定义的语法,但不是类,所以不能实例化
trait Test{
public function getInfo(){
return '我是'.$this->name.',今年'.$this->age.'岁';
}
}
//1.创建类
//Demo6:宿主类
class Demo6{
//导入trait类
use Test;
//2.添加类成员
public $name;
protected $age;
//构造方法
public function __construct($name,$age){
$this->name = $name;
$this->age = $age;
}
}
//trait:还可以用在类的继承上下文环境中
class Demo6_1 extends Demo6{
//当前自雷的自身属性
private $sex;
public function __construct($name, $age,$sex){
parent::__construct($name, $age);
$this->sex = $sex;
}
//重写父类中的方法
public function getInfo(){
return parent::getInfo().',性别是:'.$this->sex;
}
}
// 优先级: 当前类中的同名方法 > trait类中的同名方法 > 父类中的同名方法
//3.访问类成员
$obj = new Demo6('张三',25);
echo $obj->getInfo();
$obj1 = new Demo6_1('李四',45,'男');
echo $obj1->getInfo();
demo7
<?php
//接口:
//对象的模板是类,类的模板是哪个呢?类的模板是接口
//面向接口编程是最重要的编程思想之一,许多高级应用都严重依赖于它
//接口是一种约定,定义了实现它的类中必须实现的方法
//接口中没有方法的具体实现,所以不能实例化
//接口:定义工作类中的方法原型
interface iDemo{
public function getInfo();
public function hello();
}
class Demo7 implements iDemo{
public $name;
protected $age;
public function getInfo(){
return '我是'.$this->name.',今年'.$this->age.'岁';
}
public function hello(){
return '大家好';
}
public function __construct($name,$age){
$this->name = $name;
$this->age = $age;
}
}
//3.访问类成员
$obj = new Demo7('张三','25');
echo $obj->getInfo();
echo $obj->hello();
demo8
<?php
//抽象类:有抽象方法,也是要实现的方法
//接口全是抽象方法
//共同之处:统统不能实例化,原因就是内部有抽象方法
abstract class Chouxiang{
//抽象方法
abstract public function getInfo();
public function hello(){
return '大家好';
}
}
//1.创建类
//Demo8:工作类
class Demo8 extends Chouxiang {
public $name;
protected $age;
public function getInfo(){
return '我是'.$this->name.',今年'.$this->age.'岁';
}
public function __construct($name,$age){
$this->name = $name;
$this->age = $age;
}
}
//3.访问类成员
$obj = new Demo8('张三','25');
echo $obj->getInfo();
echo $obj->hello();
手抄作业