父类与子类:

根据prs-4规范,类的名称与类的文件名要保持一直,所以定义一个类的名称及文件名时要注意保持相同,否则自动加载会出现问题。

创建一个Player类,此类我们用作为父类

<?php//定义命名空间namespacecontroller;//定义一个类classPlayer{//成员属性前一定要有访问修饰符publicprotectedprivatepublic$name;public$height;public$team;protected$playNum=23;//protected只能被本类和子类访问private$weight;//只能被本类访问//__construct()魔术方法--构造方法:构造函数(构造器)除了可以给public公有成员初始化赋值外,还可以用来给私有成员,受保护的成员初始化赋值publicfunction__construct($name,$height,$team,$playNum,$weight){//对象成员之间的内部访问可以用墙头草$this$this->name=$name;$this->height=$height;$this->team=$team;$this->playNum=$playNum;$this->weight=$weight;}//声明两个方法publicfunctionjog(){return"$this->nameisjogging,whoseplayNumis$this->playNum<br>";}publicfunctionshoot(){return"$this->nameisshooting,weighing$this->weight<br>";}}?>

创建一个CnPlayer子类,子类继承父类Player的所有的内容,子类中可以扩展新增属性跟方法,也可以重写父类的方法:

classCnPlayerextendsPlayer{//新增一个属性public$country;//给子类创建构造函数(重写父类的构造函数),如果父类中的属性都能用到可以用parent::直接调用父类中的构造函数publicfunction__construct($name,$country){//parent::直接调用父类中的构造函数//parent::__construct($name,$height,$team,$playNum,$weight);$this->name=$name;$this->country=$country;}publicfunctionfrom(){return"{$this->name}comefrom{$this->country}";}}
实例化类 生成对象
$zs=newCnPlayer('ZhangSiRui','China');echo$zs->from();

静态成员:

__construct()虽然方便,但是每次类实例化一次 就自动调用一次就多占用一份内存,一些需要频繁调用,可以用静态类static来实现,不管调用多少次,都只占用一份内存,但是

静态成员不自动进行销毁,而实例化的则可以销毁。

<?phpclassUser{publicstatic$name='胡歌';protected$_config=['auth_on'=>'true','auth_type'=>1//认证方式1实时认证2位登录认证];publicstatic$nation='China';private$salary;static$count=0;//记录一登录用户的总数publicfunction__construct($name,$salary){//静态成员与类的实例无关,不能用$this访问,用self::类的引用访问静态成员self::$name=$name;$this->salary=$salary;self::$count++;}//静态方法中调用静态属性(静态方法中不能用$this->调用普通属性)publicstaticfunctiongetCount(){returnsprintf('目前该网站的在线人数为%d<br>',self::$count);}publicfunctiongetConfig(){returnsprintf('认证开关:%s<br>,认证类型%d',$this->_config['auth_on'],$this->_config['auth_type']);}}?>

静态成员可以在未实例化的情况下就直接调用,因为静态成员都是类级别的存在:

<?phprequire'User.php';echoUser::$name;

这个情况下是可以直接输出的,但是上面定义的__construct()中的$count++在未实例化类之前是不生效的,且静态成员不自动进行销毁,而实例化的则可以销毁:

<?phprequire'User.php';$user=newUser('古力娜扎',25000);$user2=newUser('迪丽热巴',25000);$user3=newUser('骚瑞',25000);//这里实例化三次$count++也就执行了三次输出$count会为3echoUser::$name;//这里如果使用一个unset()销毁,则普通成员全部销毁,但静态成员不自动进行销毁unset($user);//echo$user->getConfig();//这里汇报一个致命错误,因为getConfig()方法已被销毁,现在已不存在echoUser::$name;//静态成员依旧可以正常输出

autoload自动加载的初步进阶:

autoload自动加载的时候需要考虑到命名空间的问题 Linux跟windows里面路径中的目录分隔符写法不同,如果实现一个类自动加载能在Linux跟windows系统都能使用,就需要做一个特殊处理。

<?phpspl_autoload_register(function($className){//声明一个变量赋值为用__DIR__获取当前文件位置拼接上类所在的文件夹位置再拼接上类名称加.php后缀的绝对路径$file=__DIR__.'\\controller\\'.str_replace('\\',DIRECTORY_SEPARATOR,$className).'.php';//判断是否是不是文件名且该文件是否不存在if(!(is_file($file)&&file_exists($file))){//如果为真则抛出一个错误thrownew\Exception('文件名不合法或者不存在');}//为假就返回文件绝对路径require$file;});?>



更多相关文章

  1. opp基础:类与对象的 类的继承和调用 构造器 静态成员等
  2. 作业内容:oop基础:请举例实例演绎以下难点 1. 类(对象抽象化的结
  3. php面向对象之对象成员,静态成员,继承
  4. 给定一个数组$arr = [23,3,45,6,78,8,34],筛选其偶数成员组成新
  5. php 求数组中的偶数成员
  6. js完成购物车、es6模块导入问题
  7. 0506作业
  8. 面向对象的相关操作
  9. 百度静态网站全站搜索功能

随机推荐

  1. 国内外Android知名技术博客汇总
  2. android 代码混淆问题解决
  3. Android Apk反编译、签名
  4. Android:开发环境搭建
  5. Android(安卓)根据城市名称获取经纬度
  6. 在it混了四年了,android开始半个多年头,发
  7. Android中如何修改CheckBox的颜色
  8. Android写文件到SDCard的一般过程和代码
  9. Android(安卓)Studio:正确引入so文件的方
  10. Android进程保活