• 面向对象之链式操作


    链式操作的格式是:$obj->(方法或属性)->(方法或属性)->(方法或属性)...方法或属性一般都是类中定义的函数。下面是一个事例:

    <html>
    	<head>
    		<meta charset="utf-8">
    		<title></title>
    	</head>
    	<body>
    		<?php
    			class Student{
    				private $name;
    				private $age;
    				public function setName($name){
    					$this->name=$name;
    					return $this;	//重中之重,一定要返回$this
    				}
    				public function setAge($age){
    					$this->age=$age;
    					return $this;
    				}
    				public function getName(){
    					return $this->name;
    				}
    				public function getAge(){
    					return $this->age;
    				}
    			}
    			$stu=new Student();
    		 	echo $stu->setName("Jane")->setAge(20)->getAge();
    		 	//输出的时候只能输出一个值
    
    			class Person{
    				public $stu;
    				public function setStu(){
    					$this->stu=new Student();
    					return $this;
    				}
    				public function getStu(){
    					return $this->stu;
    				}
    			}
    			$per=new Person();
    			echo $per->setStu()->getStu()->setName("Jenny")->setAge(18)->getAge();
    			//必须先setStu(),然后必须要getStu()后才能后续的函数
    		?>
    	</body>
    </html>
    

    我觉得链式操作的主要重点在于 ‘return $this;'明确$this代表的是什么,答案是:返回当前类的对象。

    开始比较困惑的是上面在进行链式操作输出的时候,为什么不能同时输出getName()和getAge().一旦写在一起,就会提示"Fatal error: Call to a member function getAge() on a non-object",非得分开写才行。

    后来想通了,链式操作其实就是在上一步完成的前提下,对于上一步返回的值或者类进行操作。比如上面的echo $stu->setName("Jane")->setAge(20)->getAge();首先是调用$stu类当中的setName()进行赋值,现在假设赋值成功后,不返回$this,那么下一步调用setAge()就会出错,Fatal error: Call to a member function setAge() on a non-object in...,原因是setAge()没有操作对象,所以setName()必须有return $this,而且setAge()也必须有return $this,否则后面的函数将因为没有操作对象而出错。

  • 相关阅读:
    js日历,使用datepicker.js,ui.core.js,jquery-1.7.1.js
    android设置按钮按下的不同效果图
    a标签阻止跳转的方法
    获取浏览器中选中部分,比如文本等
    Android Studio does not point to a valid jvm
    Drawerlayout
    webviewactivity
    ViewFilpper
    Physik
    Betriebssystem
  • 原文地址:https://www.cnblogs.com/-beyond/p/5694720.html
Copyright © 2020-2023  润新知