魔术方法也用的蛮多,最近在想一个问题,到底php为什么要加入魔术方法这个东西,是为了更好的支持面向对象还是?
请各位路过的不吝赐教,以解小弟的疑惑!
魔术方法也用的蛮多,最近在想一个问题,到底php为什么要加入魔术方法这个东西,是为了更好的支持面向对象还是?
请各位路过的不吝赐教,以解小弟的疑惑!
为什么加入魔术方法?为什么叫魔术方法,这其实不是主要问题
比如toString这个东西,java可以直接覆盖toString,js也可以定义toString,php为什么叫_toString?
构造方法,为什么python叫__init__,php叫__construct?
然后关于php的__construct,手册里写到
立即学习“PHP免费学习笔记(深入)”;
DM建站系统法律律师事务所HTML5网站模板,DM企业建站系统。是由php+mysql开发的一套专门用于中小企业网站建设的开源cms。DM系统的理念就是组装,把模板和区块组装起来,产生不同的网站效果。可以用来快速建设一个响应式的企业网站( PC,手机,微信都可以访问)。后台操作简单,维护方便。DM企业建站系统安装步骤:第一步,先用phpmyadmin导入sql文件。 第二步:把文件放到你的本地服务
0
为了实现向后兼容性,如果 PHP 5 在类中找不到 __construct() 函数并且也没有从父类继承一个的话,它就会尝试寻找旧式的构造函数,也就是和类同名的函数。因此唯一会产生兼容性问题的情况是:类中已有一个名为 __construct() 的方法却被用于其它用途时。
也就是说php和java一样之前也是支持同名函数做构造函数的,为什么之后该了,也就是你的迷惑,我的理解,一种命名习惯而已,你说按说法这些函数会在特殊场合被自动调用,叫做魔术方法理论上没错,但是java也有这些,为什么java没搞出这个名词?
但是说句实在的,php非得整出魔术方法这个名词来,而不像其他语言把他混合在其他定义里,比如js的toString就可以做一些题的考点,而且容易被忽略,php如果定义了魔术方法,那你复习的时候肯定要这些全看一次。。倒是方便考生和应聘者了
其实还是为了更好的支持面向对象,下面是一个例子。。。
<?php
class Tools {
/**
* 利用魔术方法__call实现伪重载。。。
* @return [type] [description]
*/
public function __call($name, $args) {
if ($name === "sum") {
switch (count($args)) {
case 2:
//求和:两个数
return $this->sum2($args[0], $args[1]);
break;
case 3:
//求和:三个数
return $this->sum3($args[0], $args[1], $args[2]);
break;
}
}
}
/**
* 利用魔术方法__callStatic实现伪重载。。。
* @return [type] [description]
*/
public static function __callStatic($name, $args) {
if ($name === "area") {
switch (count($args)) {
case 1:
//计算圆的面积
return self::areaCircle($args[0]);
break;
case 2:
//计算矩形的面积
return self::areaRectangle($args[0], $args[1]);
break;
}
}
}
/**
* 计算圆的面积
* @param [type] $r [description]
* @return [type] [description]
*/
public static function areaCircle($r) {
return pi() * $r * $r;
}
/**
* 计算矩形的面积
* @param [type] $length [description]
* @param [type] $width [description]
* @return [type] [description]
*/
public static function areaRectangle($length, $width) {
return $length * $width;
}
/**
* 求和:两个数
* @param [type] $num1 [description]
* @param [type] $num2 [description]
* @return [type] [description]
*/
public function sum2($num1, $num2) {
return $num1 + $num2;
}
/**
* 求和:三个数
* @param [type] $length [description]
* @param [type] $width [description]
* @return [type] [description]
*/
public function sum3($num1, $num2, $num3) {
return $num1 + $num2 + $num3;
}
}
//测试开始
echo Tools::area(2) . "<br/>";
echo Tools::area(2, 4) . "<br/>";
$tools = new Tools();
echo $tools->sum(2, 3) . "<br/>";
echo $tools->sum(2, 3, 4) . "<br/>";
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
C++高性能并发应用_C++如何开发性能关键应用
Java AI集成Deep Java Library_Java怎么集成AI模型部署
Golang后端API开发_Golang如何高效开发后端和API
Python异步并发改进_Python异步编程有哪些新改进
C++系统编程内存管理_C++系统编程怎么与Rust竞争内存安全
Java GraalVM原生镜像构建_Java怎么用GraalVM构建高效原生镜像
Python FastAPI异步API开发_Python怎么用FastAPI构建异步API
C++现代C++20/23/26特性_现代C++有哪些新标准特性如modules和coroutines
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号