2020年5月24日

    1. <?php
    2. class A{
    3. protected static function test(){}
    4. public static function __callStatic($name,$params){
    5. var_dump($name);
    6. var_dump($params);
    7. //通过接收到的名字做操作,然后返回值
    8. if($name=='sum'){
    9. //求和
    10. $sum=0;
    11. foreach($params as $value){
    12. $sum+=$value;
    13. }
    14. return $sum;
    15. }
    16. }
    17. }
    18. //调用不存在方法
    19. A::hz('a','b');
    20. echo"<hr>";
    21. //调用没有权限的方法
    22. A::test(100,200,300);
    23. echo"<hr>";
    24. //魔法方法中实现累加功能
    25. $res=A::sum(530,110,125);
    26. var_dump($res);
    27. class A{
    28. //通常不写形参,参数并不是确定
    29. public function __invoke(){
    30. $p =func_get_args();
    31. var_dump($p);
    32. $sum=0;
    33. foreach ($p as $value){
    34. $sum+=$value;
    35. }
    36. return $sum;
    37. }
    38. }
    39. //把对象当成函数调用起始就是去调用类中的__invoke方法
    40. $obj=new A();
    41. var_dump($obj(50,60,70));
    42. abstract class A{
    43. public $name="黑子";
    44. //定义抽象方法
    45. abstract public function demo();
    46. abstract public function demo1($name,$age);
    47. public function adc(){
    48. var_dump("adc");
    49. }
    50. }
    51. class B extends A{
    52. //实现抽象方法
    53. public function demo(){
    54. var_dump("demo方法");
    55. }
    56. public function demo1($n,$a){
    57. var_dump("demo1方法",$n,$a);
    58. }
    59. }
    60. $obj=new B();
    61. var_dump($obj);
    62. $obj->demo();
    63. $obj->demo1('小黑'18);
    64. $obj->adc();
    65. var_dump($obj->name);
    66. <?php
    67. class A{
    68. protected static function test(){}
    69. public static function __callStatic($name,$params){
    70. var_dump($name);
    71. var_dump($params);
    72. //通过接收到的名字做操作,然后返回值
    73. if($name=='sum'){
    74. //求和
    75. $sum=0;
    76. foreach($params as $value){
    77. $sum+=$value;
    78. }
    79. return $sum;
    80. }
    81. }
    82. }
    83. //调用不存在方法
    84. A::hz('a','b');
    85. echo"<hr>";
    86. //调用没有权限的方法
    87. A::test(100,200,300);
    88. echo"<hr>";
    89. //魔法方法中实现累加功能
    90. $res=A::sum(530,110,125);
    91. var_dump($res);
    92. class A{
    93. //通常不写形参,参数并不是确定
    94. public function __invoke(){
    95. $p =func_get_args();
    96. var_dump($p);
    97. $sum=0;
    98. foreach ($p as $value){
    99. $sum+=$value;
    100. }
    101. return $sum;
    102. }
    103. }
    104. //把对象当成函数调用起始就是去调用类中的__invoke方法
    105. $obj=new A();
    106. var_dump($obj(50,60,70));
    107. abstract class A{
    108. public $name="黑子";
    109. //定义抽象方法
    110. abstract public function demo();
    111. abstract public function demo1($name,$age);
    112. public function adc(){
    113. var_dump("adc");
    114. }
    115. }
    116. class B extends A{
    117. //实现抽象方法
    118. public function demo(){
    119. var_dump("demo方法");
    120. }
    121. public function demo1($n,$a){
    122. var_dump("demo1方法",$n,$a);
    123. }
    124. }
    125. $obj=new B();
    126. var_dump($obj);
    127. $obj->demo();
    128. $obj->demo1('小黑'18);
    129. $obj->adc();
    130. var_dump($obj->name);
    131. <?php
    132. class A{
    133. protected static function test(){}
    134. public static function __callStatic($name,$params){
    135. var_dump($name);
    136. var_dump($params);
    137. //通过接收到的名字做操作,然后返回值
    138. if($name=='sum'){
    139. //求和
    140. $sum=0;
    141. foreach($params as $value){
    142. $sum+=$value;
    143. }
    144. return $sum;
    145. }
    146. }
    147. }
    148. //调用不存在方法
    149. A::hz('a','b');
    150. echo"<hr>";
    151. //调用没有权限的方法
    152. A::test(100,200,300);
    153. echo"<hr>";
    154. //魔法方法中实现累加功能
    155. $res=A::sum(530,110,125);
    156. var_dump($res);
    157. class A{
    158. //通常不写形参,参数并不是确定
    159. public function __invoke(){
    160. $p =func_get_args();
    161. var_dump($p);
    162. $sum=0;
    163. foreach ($p as $value){
    164. $sum+=$value;
    165. }
    166. return $sum;
    167. }
    168. }
    169. //把对象当成函数调用起始就是去调用类中的__invoke方法
    170. $obj=new A();
    171. var_dump($obj(50,60,70));
    172. abstract class A{
    173. public $name="黑子";
    174. //定义抽象方法
    175. abstract public function demo();
    176. abstract public function demo1($name,$age);
    177. public function adc(){
    178. var_dump("adc");
    179. }
    180. }
    181. class B extends A{
    182. //实现抽象方法
    183. public function demo(){
    184. var_dump("demo方法");
    185. }
    186. public function demo1($n,$a){
    187. var_dump("demo1方法",$n,$a);
    188. }
    189. }
    190. $obj=new B();
    191. var_dump($obj);
    192. $obj->demo();
    193. $obj->demo1('小黑'18);
    194. $obj->adc();
    195. var_dump($obj->name);

    笔记:
    魔术方法 callStatic
    当调用一个不可访问(不存在)的静态方法,自动调用
    callStatic(string $name,array $param):mixed
    注意:需要修饰为静态

    魔术方法 invoke
    invoke([$…]):mixed
    把对象当成函数调用的时候自动换行,并且会将实参传递带该魔术方法中

    抽象类
    限定子类必须编写方法,同时还能有一些通用的方法(属性)继承
    语法:
    类:abstract class 类名{}
    方法:abstract public function 函数名();

    1.如果类中有抽象方法,那类也必须定义为抽象类;
    2.抽象类不能实例化
    3.继承的抽象类中的所有方法必须实现(定义),可以添加形参但是必须兼容原有规则(抽象方法);
    4.出了抽象方法以外,其他内容都按正常的继承来使用