网站首页 > 开源技术 正文
今天终于要到面向对象的最后一节课了,这里整理一下之前遗漏的知识点。在这节课之后,我们将会进入到数据库的环节,毕竟任何一个程序都需要使用数据库来保存数据的!
魔术方法
魔术方法就是PHP自带的一些类的方法,在这里,我们举例几个常用的,其他的大家可以通过查看手册来学习一下。
<?php
class Magic{
public function __get($property){
echo "你想要查找".$property."值".PHP_EOL;
}
public function __set($property,$value){
echo "你要为当前对象,设置属性".$property."的值".$value.PHP_EOL;
}
public function __call($func,$arguments){
echo "调用当前对象的".$func."方法".PHP_EOL;
echo "参数为".PHP_EOL;
print_r($arguments);
}
public static function __callStatic($func,$arguments){
echo "调用当前类的静态方法".$func.PHP_EOL;
echo "静态参数为".PHP_EOL;
print_r($arguments);
}
}
$magic = new Magic();
$magic->testGet;
$magic->testSet = "testset值";
$magic->testFun("testFun的参数");
Magic::testStaticFun("testStaticFun的参数");
?>
以上会输出如下内容:
你想要查找testGet值
你要为当前对象,设置属性testSet的值testset值
调用当前对象的testFun方法
参数为
Array
(
[0] => testFun的参数
)
调用当前类的静态方法testStaticFun
静态参数为
Array
(
[0] => testStaticFun的参数
)
注:__get:当要访问某个对象中不存在的属性时会自动执行此方法;
__set:当要设置某个对象的属性时,此属性不存在,则会执行此方法;
__call:当调用某个对象不存在的方法时,会执行此方法;
__callStatic:当调用某个类的静态方法时,此静态方法不存在,则会执行此方法;
魔术常量
魔术常量就是系统中内置的常量,会依据执行的代码来自动设定的值。例如:
<?php
class Magic{
public function magicConst(){
echo __LINE__.PHP_EOL;
echo __FILE__.PHP_EOL;
echo __DIR__.PHP_EOL;
echo __FUNCTION__.PHP_EOL;
echo __METHOD__.PHP_EOL;
echo __CLASS__.PHP_EOL;
}
}
$magic = new Magic();
$magic->magicConst();
?>
以上会输出如下内容:
4
C:\Users\86150\Desktop\web\index.php
C:\Users\86150\Desktop\web
magicConst
Magic::magicConst
Magic
__LINE__:表示当前代码的第几行;
__FILE__:表示当前文件的绝对路径;
__DIR__:表示当前文件的路径(不包括代码的名);
__FUNCTION__:表示当前执行的方法的名称;
__METHOD__:表示方当执行的方法的名称(会包含类名);
__CLASS__:表示当前执行的类名;
trait
php是不支持多继承的,但是,提供了trait关键字,类似实现多继承的方式,看如下例子:
<?php
trait TraitTest{
public $value;
public function traitTestFun(){
echo "我是trait的测试方法:".$this->value.PHP_EOL;
}
}
class TraitEnter{
use TraitTest;
public function __construct($val){
$this->value = $val;
}
}
$traitEnter = new TraitEnter("value值");
$traitEnter->traitTestFun();
?>
以上会输出如下内容:
我是trait的测试方法:value值
注:虽然TraitEnter中没有traitTestFun的方法,但是,trait关键字是代码复用的一个方法,想要复用代码,只需要类中使用use 关键字,注意这个use是在类的大括号中,不是在外面的引用空间;
继承中调用父类方法和重载
有的时候需要在子类中调用父类中的方法,我们可以使用parent关键字;
有的时候如果需要把父级的某个方法重载(重写),我们只要定一个同名的方法,且参数同父类一致。
看如下例子:
<?php
class Father{
public function __construct()
{
echo "我是父级方法".PHP_EOL;
}
public function testFun()
{
echo "Father的testFun";
}
}
class Son extends Father{
public function __construct($value)
{
parent::__construct();
echo "传递过来的值为:".$value.PHP_EOL;
}
public function testFun()
{
echo "Son的testFun";
}
}
$son = new Son("sun value");
$son->testFun();
?>
以上会输出如下内容:
我是父级方法
传递过来的值为:sun value
Son的testFun
注:调用父级方法,使用parent::父级方法名称(),以上代码调用了父级的构造函数:parent::__construct();
重载(重写):我们只要定一个同名的方法,且参数同父类一致。
猜你喜欢
- 2024-09-28 Android 开发者应该知道的 Kotlin 技巧 | Gitee 项目推荐
- 2024-09-28 java技术栈-服务四层技术(java技术架构图)
- 2024-09-22 程序员高效率实用工具推荐(web开发+爬虫+数据库+……)
- 2024-09-22 大数据开源舆情分析系统-数据采集技术架构浅析
- 2024-09-22 除了Android开发Kotlin 还能做什么?六款优质Kotlin项目分享
- 2024-09-22 我所理解的爬虫(对于爬虫的理解)
- 2024-09-22 爬虫神器,WebMagic如何监控?(python爬虫监控)
- 2024-09-22 爬虫神器,webmagic网页内容如何解析?
- 2024-09-22 爬虫神器,Webmagic快速上手如此简单
- 2024-09-22 爬虫神器,WebMagic组件的使用和定制
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)