php.php 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272
  1. <?php
  2. /**
  3. * Class
  4. * http://php.net/manual/zh/language.oop5.basic.php
  5. */
  6. class NormalClass extends AbstractClassName implements InterfaceName
  7. {
  8. // 引用 Trait (为 PHP 提供多继承的能力,可理解为代码复制)
  9. use TraitName;
  10. // --> 类属性类型 <--
  11. /**
  12. * 公有的类成员可以在任何地方被访问,会被继承。
  13. * @var Type
  14. */
  15. public $property;
  16. /**
  17. * 私有的类成员则只能被其定义所在的类访问,不会被继承。
  18. * @var Type
  19. */
  20. private $property;
  21. /**
  22. * 受保护的类成员则可以被其自身以及其子类和父类访问,会被继承。
  23. * @var Type
  24. */
  25. protected $property;
  26. /**
  27. * 静态变量,也被称为类变量,所有对象的变量都是同一个。
  28. * @var Type
  29. */
  30. static $property;
  31. // --> 方法类型 <--
  32. /**
  33. * 公共方法,任何对象都能访问。
  34. * @param Type
  35. * @return Type
  36. */
  37. public function publicFunction(Type $var = null): Type
  38. {
  39. }
  40. /**
  41. * 私有方法,只有对象自身可以访问。
  42. * @param Type
  43. * @return Type
  44. */
  45. private function privateFunction(Type $var = null): Type
  46. {
  47. }
  48. /**
  49. * 保护方法,只有自身和子类可以访问。
  50. * @param Type
  51. * @return Type
  52. */
  53. protected function protectedFunction(Type $var = null): Type
  54. {
  55. }
  56. /**
  57. * 静态方法,可以在不实例化类的情况下执行。
  58. * @param Type
  59. * @return Type
  60. */
  61. public static function staticFunction(Type $var = null): Type
  62. {
  63. }
  64. // --> 魔术方法 <--
  65. /**
  66. * 具有构造函数的类会在每次创建新对象时先调用此方法,所以非常适合在使用对象之前做一些初始化工作。
  67. * http://php.net/manual/zh/language.oop5.decon.php
  68. * @param Type
  69. * @return void
  70. */
  71. public function __construct(Type $var = null)
  72. {
  73. }
  74. /**
  75. * 析构函数会在到某个对象的所有引用都被删除或者当对象被显式销毁时执行。
  76. * http://php.net/manual/zh/language.oop5.decon.php
  77. * @return void
  78. */
  79. public function __destruct()
  80. {
  81. }
  82. /**
  83. * 在给不可访问属性赋值时,__set() 会被调用。
  84. * http://php.net/manual/zh/language.oop5.overloading.php
  85. * @param string name
  86. * @param mixed value
  87. * @return void
  88. */
  89. public function __set(string $name , mixed $value)
  90. {
  91. }
  92. /**
  93. * 读取不可访问属性的值时,__get() 会被调用。
  94. * http://php.net/manual/zh/language.oop5.overloading.php
  95. * @param string name
  96. * @return mixed
  97. */
  98. public function __get(string $name)
  99. {
  100. }
  101. /**
  102. * 当对不可访问属性调用 isset() 或 empty() 时,__isset() 会被调用。
  103. * http://php.net/manual/zh/language.oop5.overloading.php
  104. * @param string name
  105. * @return bool
  106. */
  107. public function __isset(string $name)
  108. {
  109. }
  110. /**
  111. * 当对不可访问属性调用 unset() 时,__unset() 会被调用。
  112. * http://php.net/manual/zh/language.oop5.overloading.php
  113. * @param string name
  114. * @return void
  115. */
  116. public function __unset(string $name)
  117. {
  118. }
  119. /**
  120. * 在对象中调用一个不可访问方法时,__call() 会被调用。
  121. * http://php.net/manual/zh/language.oop5.overloading.php
  122. * @param string name
  123. * @param array arguments
  124. * @return mixed
  125. */
  126. public function __call(string $name, array $arguments)
  127. {
  128. }
  129. /**
  130. * 在静态上下文中调用一个不可访问方法时,__callStatic() 会被调用。
  131. * http://php.net/manual/zh/language.oop5.overloading.php
  132. * @param string name
  133. * @param array arguments
  134. * @return mixed
  135. */
  136. public static function __callStatic(string $name, array $arguments)
  137. {
  138. }
  139. /**
  140. * serialize() 函数会检查类中是否存在一个魔术方法 __sleep()。
  141. * 如果存在,该方法会先被调用,然后才执行序列化操作。此功能可以用于清理对象,
  142. * 并返回一个包含对象中所有应被序列化的变量名称的数组。
  143. * 如果该方法未返回任何内容,则 NULL 被序列化,并产生一个 E_NOTICE 级别的错误。
  144. * http://php.net/manual/zh/language.oop5.magic.php#object.sleep
  145. * @return array
  146. */
  147. public function __sleep()
  148. {
  149. }
  150. /**
  151. * 与之相反,unserialize() 会检查是否存在一个 __wakeup() 方法。
  152. * 如果存在,则会先调用 __wakeup 方法,预先准备对象需要的资源。
  153. * http://php.net/manual/zh/language.oop5.magic.php#object.wakeup
  154. * @return void
  155. */
  156. public function __wakeup()
  157. {
  158. }
  159. /**
  160. * __toString() 方法用于一个类被当成字符串时应怎样回应。
  161. * 例如 echo $obj; 应该显示些什么。此方法必须返回一个字符串,
  162. * 否则将发出一条 E_RECOVERABLE_ERROR 级别的致命错误。
  163. * http://php.net/manual/zh/language.oop5.magic.php#object.tostring
  164. * @return string
  165. */
  166. public function __toString()
  167. {
  168. }
  169. /**
  170. * 当尝试以调用函数的方式调用一个对象时,__invoke() 方法会被自动调用。
  171. * http://php.net/manual/zh/language.oop5.magic.php#object.invoke
  172. * @param Type
  173. * @return mixed
  174. */
  175. public function __invoke(Type $var = null)
  176. {
  177. }
  178. /**
  179. * 自 PHP 5.1.0 起当调用 var_export() 导出类时,此静态 方法会被调用。
  180. * http://php.net/manual/zh/language.oop5.magic.php#object.set-state
  181. * @param array properties
  182. * @return object
  183. */
  184. public static function __set_state(array $properties)
  185. {
  186. }
  187. /**
  188. * 在使用 var_dump() 时,会被调用。
  189. * http://php.net/manual/zh/language.oop5.magic.php#object.debuginfo
  190. * @return array
  191. */
  192. public function __debugInfo()
  193. {
  194. }
  195. }
  196. /**
  197. * 接口
  198. * 任何实现接口的类,都必须实现接口中的方法。
  199. */
  200. interface InterfaceName
  201. {
  202. public function FunctionName(Type $var = null): Type;
  203. }
  204. /**
  205. * 抽象类
  206. * 抽象类中可以包含普通方法,和抽象方法。
  207. */
  208. abstract class AbstractClassName
  209. {
  210. /**
  211. * 继承本抽象类的类,必须实现抽象方法。
  212. * @param Type
  213. * @return Type
  214. */
  215. abstract function abstractFunction(Type $var = null): Type;
  216. }
  217. /**
  218. * Trait
  219. * 提供代码复用能力、多继承能力
  220. */
  221. trait Logger
  222. {
  223. public function log($message)
  224. {
  225. return $message;
  226. }
  227. }
  228. class WriteLog
  229. {
  230. use Logger;
  231. public function main()
  232. {
  233. return $this->log();
  234. }
  235. }