类与对象
<?php
//类与对象
//类成员方法
//工作类
class User
{
public $name='黄金左脚';
public static $age=30;
function Demo1()
{
//老方法不推荐这样写:
//$user=new User();
//echo $user->name;
//新特性:直接使用PHP系统定好的$this->就可以了。
echo $this->name;
echo '<br>今年的年龄是:'. self::$age;//这种方式也不推荐。推荐使用Demo3()
}
//closuer 用于代表 匿名函数 的类.允许在匿名函数创建后对其进行更多的控制
//可以限定类型(string $dep,Closure $closure)
function Demo2($closure,$dep)//顺序跟传参一样
{
//添加私有属性(不推荐)
//$deposit=50000;
//global $deposit
//新特性通过传参来实现(推荐)不过传参时至少需要两个参数。一个会报错
echo $closure().$dep;
}
public static function Demo3()
{
echo self::$age;
}
}
$user=new User();
$user->Demo1();
echo '<hr>';
$have=function()
{
echo '有房有车,年薪:';
};
$deposit=500000;
//这里传参的顺序需要注意下,还有只有一个参数好像也会出错
$user->Demo2($have,$deposit);
echo '<br>';
$user->Demo3();
类成员访问控制:作用域
<?php
//类成员访问控制:作用域
class User
{
public $name='王霸丹';
//protected为受保护的,禁止外部访问
protected $tel='13500135000';
// private为私有的,禁止继承和外部访问
private $birth='2020-02-20 20:20:02';
//public static function stat();非抽象方法会报错
//本类中可以访问本类中的任何方法
public static $age=30;
public function Demo1()
{
echo $this->birth;
}
protected function Demo4()
{
echo '我是单身汪';
}
}
//extends继承 /// 多态
class My extends User
{
protected $address='china';
protected $bank=11001100;
private $pass=123456;
public function Demo2()
{
echo $this->name,'<br>',$this->tel,'<br>';
//echo $this->birth;//birth是私有不被继承,所以不会被打印
}
public function Demo3()
{
echo '我的年龄是:',self::$age;
echo "<br>目前:";
$user=new User();
$user->Demo4();
echo "<br>过来N年后,我已经是:";
static $age=60;
echo $age,'现在卡号是:',$this->bank;
echo $age,'现在卡号密码是:',$this->pass;
//parent,它指的就是派生类在 extends声明中所指的基类的名字。这样做可以避免在多个地方使用基类的名字。
echo '<br>';
// 二类成员: 子类有权访问的父类成员类型, public, protected
// 三种操作: 子类对父类的三种操作: 继承, 重写, 扩展
// 1. 继承: 父类的二类成员自动成为子类的成员
// 2. 重写: 覆写与父类/基类同名的成员(属性, 方法)
// 3. 扩展: 子类添加自身的方法来增加/扩展父类的功能
// 重写父类成员
echo parent::Demo4().$this->address.parent::Demo1();
}
}
$user=new User();
$user->Demo1();
echo '<br>';
$my=new My;
$my->Demo2();
$my->Demo3();
最终方法和最终类 final
<?php
//最终方法和最终类 final
//可以理解:final禁止某个了或方法被重写
//final class User//这种方法就禁止了class Name里面的方法重写
class User
{
public $age=30;
public function Demo1()
{
// 打印类和方法
echo __METHOD__,'<br>';
}
}
class Name
{
public function Demo1()
{
// 打印类名和(类和方法名)
echo __CLASS__.__METHOD__;
}
}
$user = new User;
$user->Demo1();
$name=new Name;
$name->Demo1();
抽象类
<?php
// 抽象类: 部分分离了" 设计(抽象类中完成)与实现(工作类中完成)"
//抽象类不能被实例化,关键字“abstract”.语法:abstract function xx();
//只要类里面存在一个抽象方法,这个类就叫抽象类
abstract class Test
{
protected $age=30;
protected function Deom1()
{
echo $this->age;
}
abstract protected function Demo2();
}
//Test是抽象类,所以不能被实例化(不能单独运行)
//new Test;//报错为不能实例化
//工作类同样可以是抽象类
class Test1 extends Test
{
//实现类继承后必须实现抽象类.否则报错
//继承后需要使用请改为public
public function Demo2()
{
echo '测试下。。。';
}
}
class Test2 extends Test1
{
}
$test1=new Test1();
$test1->Demo2();
接口
<?php
//接口:关键字:interface
//完成分离:设计与实现;
// 使用与类相似的语法: 抽象方法, 常量, 构造方法(魔术方法的一种)。 接口允许多继承
//可以是单接口。也可以是多接口
interface iUser
{
const NAME='阿蒙';
//方法需要public
public static function Demo1();
}
interface iName
{
public function Demo2();
}
//接口继承关键字implements
//实现类
class iUser1 implements iUser,iName
{
public static function Demo1()
{
echo '测试下。。';
}
public function Demo2()
{
echo '这是demo2';
echo iUser::NAME;
}
}
$iuser=new iUser1();
$iuser->Demo1();
$iuser->Demo2();
总结:刚开始写作业的时候碰到很多钉子,导致迟迟不能解决,迟迟不能交作业。等到研究明白了,才发现。这些作业确实是非常的简单。不过有一点,应该跟时间有关系,应该多敲一下代码涨点记性。要不然一看代码就懂,一写代码就忘。