博客列表 >PHP第课 对着天空,将OOP编程的三大步骤,大声的喊10遍 12月3日

PHP第课 对着天空,将OOP编程的三大步骤,大声的喊10遍 12月3日

孤忆寻昔R
孤忆寻昔R原创
2019年12月15日 15:05:221036浏览

作业一






作业二

  1. <?php
  2. //oop基本编程步骤
  3. //1、创建类
  4. class Demo1
  5. {
  6. //2、添加类成员
  7. //在类中的变量和函数,和成渝中的变量函数有区别,添加了访问限制符
  8. //变量=》属性,函数=》方法, 访问限制符 成员
  9. public $site = 'phpstorm';
  10. //创建方法: 输出当前类的属性$site
  11. public function getSie()
  12. {
  13. // 1、第一步: 类的实例化
  14. $obj = new Demo1();
  15. // 2、第二步: 返回类属性
  16. return $obj ->site . '快来使用';
  17. }
  18. }
  19. //3、访问类成员
  20. $obj =new Demo1();
  21. //访问属性: 对象成员访问符:->
  22. echo $obj->site.'</br>';
  23. echo $obj->getSie();
  24. <?php
  25. class Demo2
  26. {
  27. public $site = '中文表层';
  28. public $role = '讲师';
  29. public function getSite()
  30. {
  31. // 1、实例化对象
  32. $obj = new self;
  33. return $obj->site . '感谢使用';
  34. // 2、放回类属性
  35. }
  36. public function getRole()
  37. {
  38. // $obj = new self;
  39. return $this->role;
  40. }
  41. }
  42. $obj = new Demo2();
  43. echo $obj->site.'<br>';
  44. //echo $obj->getSite();
  45. echo $obj->getRole();
  46. <?php
  47. class Demo3
  48. {
  49. //类成员
  50. public $site;
  51. public $role;
  52. public function getInfo()
  53. {
  54. return '我是:'.$this->role.$this->role;
  55. }
  56. // 构造方法:
  57. // 1、类实例的初始化;2、制动完成在类实例创建过程中的操作
  58. public function __construct($site,$role)
  59. {
  60. // 1、初始化类成员
  61. $this->site = $site;
  62. $this->role = $role;
  63. // 2、创建类实例
  64. // $obj = new self;
  65. // 3、添加类实例成员
  66. // $obj->site = $this->site;
  67. // $obj->role = $this->role;
  68. // 在类实例化是会自动执行
  69. echo $this->getInfo();
  70. // 4、返回类实例
  71. // return $obj;
  72. }
  73. }
  74. $obj = new Demo3('中文网','Lecture');
  75. <?php
  76. //访问控制,实现类的封装
  77. class Demo4
  78. {
  79. // 添加成员
  80. public $site;
  81. // private $name = 'pterSer';
  82. //如果不想该属性在类的外部访问,可以将该属性的访问控制符修改为:
  83. // protected 、 private
  84. // public $role;
  85. protected $role;
  86. public function getInfo()
  87. {
  88. return '我是:'.$this->site.$this->role;
  89. }
  90. public function __construct($site,$role)
  91. {
  92. $this->site = $site;
  93. $this->role = $role;
  94. }
  95. //外部无权访问,是为了防止非法访问,并代表禁止访问
  96. // 为这样的属性创建一个访问器方法,来过滤要不过户的访问轻松
  97. /*public function getRoe()
  98. {
  99. //允许用户名是‘admin’的用户访问,其他访问返回: 无权访问
  100. $username = $_GET['username'] ?? '';
  101. if(isset($username) && $username ==='admin')
  102. {
  103. return $this->role;
  104. } else {
  105. echo '无权访问';
  106. }
  107. }
  108. public function getName()
  109. {
  110. return isset($this->name) ? $this->name : '不存在该属性';
  111. }*/
  112. //魔术方式: __get($name) ,属性重载
  113. // 访问不存在的成员属性可以使用,省去为成员 重新定的方法
  114. public function __get($name)
  115. {
  116. $username = $_GET['username'] ?? '';
  117. if(isset($username) && $username === 'admin')
  118. {
  119. return isset($this->$name) ? $this->$name : '属性未定义';
  120. } else {
  121. return '无权访问';
  122. }
  123. }
  124. }
  125. //访问类成员
  126. $obj = new Demo4('www.baidu.com','引擎');
  127. echo $obj ->role.'<br>';
  128. //使用访问器方法
  129. //echo $obj->getRoe();
  130. echo '<hr>';
  131. //echo $obj->getName();
  132. echo $obj->name;
  133. <?php
  134. //类的继承
  135. //1、创建类
  136. class Demo5
  137. {
  138. //2、添加类成员
  139. public $site ;
  140. protected $role;
  141. public function getInfo()
  142. {
  143. return '我是:' .$this->site. $this->role;
  144. }
  145. public function __construct($site,$role)
  146. {
  147. $this->site = $site;
  148. $this->role = $role;
  149. }
  150. }
  151. class Demo5_1 extends Demo5
  152. {
  153. // 当前是子类自身的属性
  154. private $course;
  155. public function __construct($site, $role,$course)
  156. {
  157. //parent: 调用父类的成员
  158. parent::__construct($site, $role);
  159. $this->course = $course;
  160. }
  161. //重写父类中的方法
  162. public function getInfo()
  163. {
  164. return parent::getInfo(). ',负责的课程是:'.$this->course;
  165. }
  166. }
  167. //3、访问类成员
  168. $sub = new Demo5_1('baidu.com','朱老师','PHP');
  169. echo $sub->getInfo();
  170. <?php
  171. //trait: 代码复用方式,用来扩用当前类的功能
  172. //trait: 当一个公共方法库
  173. //trait: 使用了类的定义语法,但不是类,所以不能实例化
  174. trait Test
  175. {
  176. public function getInfo()
  177. {
  178. return '我是:'.$this->site .'讲师'.$this->role;
  179. }
  180. }
  181. //创建类
  182. class Demo6
  183. {
  184. // 导入trait类库
  185. use Test;
  186. public $site;
  187. protected $role;
  188. // public function getInfo()
  189. // {
  190. // return '我是:'.$this->site .$this->role;
  191. // }
  192. public function __construct($site,$role)
  193. {
  194. $this->site = $site;
  195. $this->role = $role;
  196. }
  197. }
  198. //trait: 还可以用在类的上下文环境中
  199. class Demo6_1 extends Demo6
  200. {
  201. private $counstr;
  202. public function __construct($site,$role,$counstr)
  203. {
  204. parent::__construct($site,$role);
  205. return $this->counstr = $counstr;
  206. }
  207. // 从写父类
  208. public function getInfo()
  209. {
  210. return parent::getInfo().',我负责是:'.$this->counstr;
  211. }
  212. }
  213. //优先级: 当前类中的同名方法 > trait ,类中的同名方法 > 父类中的同名方法
  214. //3、 访问类成员
  215. $obj = new Demo6('百度搜索','PeterZhu','sdf');
  216. echo $obj->getInfo();
  217. echo '<hr>';
  218. $sub = new Demo6_1('百度搜索','PeterZhu','sdf');
  219. echo $sub->getInfo();
  220. <?php
  221. //接口:
  222. //对象的模板就是类,类的对象时接口
  223. //面向接口编程时最重要的思想编程之一,许多高级应用都是严重依赖与它
  224. //接口是一种预定,定义了实现它的类中必须实现的方法
  225. //接口中没有方法的具体实现,所以不能实例化
  226. interface iDemo
  227. {
  228. //接口中有常量,
  229. // 接口方法
  230. public function getInfo();
  231. public function hello();
  232. public function Name();
  233. }
  234. //1、创建类
  235. class Demo7 implements iDemo
  236. {
  237. //2、添加成员
  238. public $site;
  239. protected $role;
  240. public function getInfo()
  241. {
  242. return '我是:'.$this->site.'讲师'.$this->role;
  243. }
  244. public function hello()
  245. {
  246. return 'Hello 大家今天学习了?';
  247. }
  248. public function Name()
  249. {
  250. return $this->site.'今天休息'.$this->role;
  251. }
  252. //构造方法
  253. public function __construct($site,$role)
  254. {
  255. $this->site = $site;
  256. $this->role = $role;
  257. }
  258. }
  259. //3、访问类成员
  260. $obj = new Demo7('baidu','祝好是');
  261. echo $obj->getInfo().'<br>';
  262. echo $obj->hello().'<br>';
  263. echo $obj->Name();
  264. <?php
  265. //抽象类:
  266. //抽象:有抽象方法,也有实现的方法
  267. //接口中全是抽象方法
  268. //共同之处: 统统不能实例化,原因是内部有抽象方法
  269. abstract class Chouxiang
  270. {
  271. //抽象方法
  272. abstract public function getInfo();
  273. //已实现方法
  274. public function hello()
  275. {
  276. return 'Hello 大家今天学习了?';
  277. }
  278. }
  279. //1、创建类
  280. class Demo8 extends Chouxiang
  281. {
  282. //2、添加成员
  283. public $site;
  284. protected $role;
  285. public function getInfo()
  286. {
  287. return '我是:'.$this->site.'讲师'.$this->role;
  288. }
  289. // 构造方法
  290. public function __construct($site,$role)
  291. {
  292. $this->site = $site;
  293. $this->role =$role;
  294. }
  295. }
  296. //3、访问类成员
  297. $obj = new Demo8('百度搜索','全站搜索');
  298. echo $obj->getInfo().'<br>';
  299. echo $obj->hello();
  300. echo $obj->Name();

总结

1、三大步骤, 创建类 、 添加成员、 访问成员

2、构造方法,实例化对象后 new(’name’,’age’,’sex’);必须传参

3、在子类中可以继承extend,可以重写父类方法,Trait可以复制复用方法!

4、接口中出现的方法必须实现和继承, 抽象就是给其他方法继承的!都不能实例化

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议