Blogger Information
Blog 34
fans 0
comment 0
visits 26612
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
匿名对象,匿名类+trait类+类的自动加载—+对象的序列化和反序列化+面向对象编程的理解
罗盼的博客
Original
772 people have browsed it

实例

<?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.面向对象是一个动态类型的语言,只有在执行过程中才加载
*/



?>

运行实例 »

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


Correction status:qualified

Teacher's comments:
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments