博主信息
博文 34
粉丝 0
评论 0
访问量 33221
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
匿名对象,匿名类+trait类+类的自动加载—+对象的序列化和反序列化+面向对象编程的理解
罗盼的博客
原创
1009人浏览过

实例

<?php
header("content-type:text/html; charset=utf-8");
/*1.匿名对象与匿名类
匿名对象:没有对象的实例,直接使用该类
*/
class books
{  
   private $bookName;//书名
   private $number;//编号
   private $arr_books_name = array();//书名收集数组临时存入

 

   public function show_book_number( $bookName){ //展示书编号 
   
        $message = '';//返回消息 
        $number = '';//书对应的编号    
        $str_books_name = file_get_contents('books_name.txt');//取出文件中已经保存好编号的书名
        $this->arr_books_name = explode('-',$str_books_name);//字符转数组
        
         if(in_array($bookName,$this->arr_books_name)){
           //首先查找传进来的书名在不在书名收集数组中,如果在则不用添加编号
           $number = array_search($bookName,$this->arr_books_name); 
           $message = '这本书的名字是:'.$bookName.'对应编号是'.$number;//返回消息
        }else{
          //如果不在将书名添加进书名收集数组,并输出当前数组的下标作为新书的编号
          array_push($this->arr_books_name,$bookName);                  
          $number = array_search($bookName,$this->arr_books_name);
          //将数组转换为字符存入books_name.txt中
          $str_name = implode('-',$this->arr_books_name);
          file_put_contents('books_name.txt',$str_name);
          $message = '这是本新书名字是:《'.$bookName.'》对应编号是'.$number;       
        }        
        return $message;  
   }

}
//实例化对象
$book=new books();
echo $book->show_book_number('花和尚150');
//匿名对象
//echo (new books)->show_book_number('花和尚152');

//匿名类
//echo (new class {public function test(){return '这是匿名类';}})->test();

/*2.trait 类的声明与工作原理
trait类,似类非类,相当于方法集,当子类继承父类,且引用trait时,同名方法会执行trait类中的方法,
当子类中也有同样方法时,会执行子类自己的方法,优先级是子类>trait类>父类,trait类不可以实例化
但是可以有属性,如果子类引用trait类,同名属性会报错,解决办法是给同名属性都给ture,$name = ture;

*/
//基类 
class Animal{
    
    public function calls()
    {
        echo '1'; 
    }
}

//trait类
//trait Bird{
  // public $name = true;
   //public function calls()
  // {
   //     parent::calls();
   //     echo '2';
   //}  
//}
//子类
 class Eagle extends Animal{
    public $name = true;
   // use Bird;
 }

$oriole = new Eagle();
$oriole->calls();//此时会输出:2

/*
3.类自动加载
*/
spl_autoload_register(function ($className){
    require'./class/.'.$className.'php';
    //存在命名空间时
    //$className = str_replace("\\","/",$className);
    //require'./class/.'.$className.'php';
});

/*
4.对象的序列化:主要用在传输数据且不改变数据结构
当调用serialize()函数序列化对象时,该函数会检查类
中是否存在一个魔术方法__sleep()。
如果存在,该方法会先被调用,然后才执行序列化操作。
可以通过重载这个方法,从而自定义序列化行为


unserialize()反序列化函数用于将单一的已序列化的变量转换回 PHP 的值
如果传递的字符串不可解序列化,则返回 FALSE,并产生一个E_NOTICE
返回的是转换之后的值,可为integer,float、string、array或object
若被反序列化的变量是一个对象,在成功重新构造对象之后,
PHP会自动地试图去调用__wakeup()成员函数(如果存在的话)

*/
$str = '看看';
echo serialize($str),'<br>';
$tmp = serialize($str);
echo unserialize($tmp),'<br>';
$arr = array('note'=>'self','tag'=>'this');
$tmp_arr = serialize($arr);
echo serialize($arr),'<br>';
print_r(unserialize($tmp_arr));

/*五.我对面向对象编程的理解
1.面向对象有三大特征:继承,封装,多肽
继承是指:类与类之间可以继承,但是必须是单一继承,就是一个爸爸可以有很多儿子,
但是一个儿子只有唯一的亲爸爸,子类可以继承父类的方法,但是private不可被继承,
也可以改写父类的方法,构建自己的属性。多肽是同一个类多样的表现形式。封装是提供外部接口,
尽可能隐藏实现细节,调用接口时,由一个个对象具体去实现功能。
2.面向对象编程可以提高代码的复用,减去代码冗余
3.面向对象可以使程序模块化,维护成本大大降低
4.在不改变内部结构时,外部通过继承,重写自己的方法,扩展性强
5.面向对象编程可以减少甚至避免各个代码块之间的数据相互影响
6.将现实事物抽象出一个类,提供接口,参数,返回数据,
将结构和数据隔离,打造一个功能强大的模板
7.面向对象的首先是对象的识别,其次是属性的识别,再是功能行为的识别
8.类与类之间相互不相互依赖,但是可以传递消息
9.面向对象是一个动态类型的语言,只有在执行过程中才加载
*/



?>

运行实例 »

点击 "运行实例" 按钮查看在线实例


批改状态:合格

老师批语:
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学