基于PHP5魔术常量与魔术方法的详解
本篇文章是对PHP5中的魔术常量与魔术方法进行了详细的分析介绍,需要的朋友参考下
魔术常量:
1。__LINE__
返回文件中的当前行号。
2。__FILE__
返回文件的完整路径和文件名。如果用在包含文件中,则返回包含文件名。自PHP4.0.2 起,__FILE__总是包含一个绝对路径,美国空间,而在此之前的版本有时会包含一个相对路径。
3。__FUNCTION__
返回函数名称(PHP4.3.0 新加)。自PHP5 起本常量返回该函数被定义时的名字(区分大小写)。在PHP4 中该值总是小写字母的。
4。__CLASS__
返回类的名称(PHP4.3.0 新加)。自PHP5 起本常量返回该类被定义时的名字(区分大小写)。在PHP4 中该值总是小写字母的。
5。__METHOD__
返回类的方法名(PHP5.0.0 新加)。返回该方法被定义时的名字(区分大小写)。
魔术函数:
1。__construct()
构造函数: 实例化对象时被调用,
当__construct和以类名为函数名的构造函数同时存在时,__construct将被调用,另一个不被调用。
4。__get()
读取一个对象的属性时,若属性存在,则直接返回属性值;若不存在,则会调用__get函数。
5。__set()
设置一个对象的属性时,
若属性存在,则直接赋值;
若不存在,则会调用__set函数。
6。__toString()
打印一个对象的时被调用。如echo$obj;或print$obj;
7。__clone()
克隆对象时被调用。如:$t=newTest();$t1=clone $t;
8。__sleep()
serialize之前被调用。若对象比较大,想删减一点东东再序列化,可考虑一下此函数。
9。__wakeup()
unserialize时被调用,做些对象的初始化工作。
10。__isset()
检测一个对象的属性是否存在时被调用。如:isset($c->name)。
11。__unset()
unset一个对象的属性时被调用。如:unset($c->name)。
12。__set_state()
调用var_export时,被调用。用__set_state的返回值做为var_export的返回值。
13。__autoload()
实例化一个对象时,如果对应的类不存在,则该方法被调用。
初识魔术方法
Php5.0发布以来为我们提供了很多面向对象的特性,尤其是为我们提供了好多易用的魔术方法,这些魔术方法可以让我们简化我们的编码,更好的设计我们的系统。今天我们就来认识下php5.0给我们提供的魔术方法。
PHP| 魔术方法|__toString(),__clone(),__call(),__autoload() 详解
__toString()
如果我有一个类:
classPerson
{
private $name = “”;
private $age = 0;
function__construct($name = “”, $age = “”)
{
$this->name =$name;
$this->age = $age;
}
functionsay()
{
echo“name:”.$this->name.”
”.”age:”.$this->age.”
”;
}
}
现在我去实例化这个类,然后去打印这个实例:
$p1= new person(“liuzy”,20);
echo $p1; //直接打印会出错
显然这样直接打印对象是会出现错误的,因为对象是引用句柄,香港虚拟主机,不能直接打印。这时,我们可以用到__toString()方法。我们在Person类里加一个__toString()方法:
function__toString()
{
return “I am Person,my name is“.$this->name.”
”;
}
然后再刷新页面,发现什么了?
现在我们明白,__toString()是在直接打印对象时执行的方法,我们可以用该方法打印类的一些相关信息。注意:是两个下划线,方法必须有返回值。
__clone()
我们知道对象是可以直接赋值的,比如
$p2= $p1; //这里是一个对象有两个引用
那么我执行:
$p1->say();
$p2->say();
是都可以执行的,而且效果一样。
我们还有一种方法:
$p3= clone $p1; //注意clone是克隆关键字,这里与上面的不同是$p3是一个新的对象。
同时我们在类里加入一个方法:
function__clone()
{
$this->name = “我是副本”; //注意:这里的$this是克隆产生的对象本身,不是当前类
}
然后我们执行:
$p3->say();
打印出:
name:我是副本
age:20
到这里我们明白,__clone()方法是在克隆对象的时候执行的方法,香港服务器,它的作用是对新克隆出来的副本进行属性初始化等操作。
__call()
这个方法的主要功能是:在该类的实例调用一个不存在的方法时,执行该__call()方法。注意需要提前在类里声明:
function__call($fname,$argus)
{
echo “你调用的方法:”.$fname.”不存在
”;
echo“参数是”.print_r($argus);
}
__autoload()
我们在平时调用一个类的时候,必须要先将该类所在的文件引入(include“xxx.php”),如果我们在一个页里调用的类很多,那么我们不得不使用许多的include“xxx.php”。显然这样很麻烦。
__autoload()方法可以帮我们解决这个问题。
比如我们将上面的那个Person类所在的文件定义为Person_class.php ,
再新建一个php文件 test.php,编辑内容:
function __autoload($calssName)
{
include $className.”_class.php”; //看到这也许你就明白了吧?哈哈
}
$p= new Person(“mifan”, 22);
$p->say();
这样执行该test.php页面就不会出现错误了。
__autoload()方法是在生命不存在的类时调用的方法,它有一个string类型的参数是声明该不存在类的类名。
当然,类文件的命名也是很有讲究的。最好是和类有关系,比如Person_class.php

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











php5와 php8의 차이점은 성능, 언어 구조, 유형 시스템, 오류 처리, 비동기 프로그래밍, 표준 라이브러리 기능 및 보안 측면에서 있습니다. 자세한 소개: 1. 성능 향상 PHP5와 비교하여 PHP8은 JIT 컴파일러를 도입하여 일부 고주파 실행 코드를 컴파일하고 최적화하여 실행 속도를 향상시킵니다. PHP8에는 몇 가지 새로운 언어 구조와 기능이 도입되었습니다. PHP8은 명명된 매개변수를 지원하므로 개발자는 매개변수 순서 대신 매개변수 이름을 전달할 수 있습니다.

php5에서 포트 80을 변경하는 방법: 1. Apache 서버 구성 파일에서 포트 번호를 편집합니다. 2. PHP가 새 포트에서 작동하도록 PHP 구성 파일을 편집합니다. 3. Apache 서버를 다시 시작하면 PHP 응용 프로그램이 실행됩니다. 새 포트에서 실행을 시작합니다.

Python 메타프로그래밍 기본 Python 메타프로그래밍은 Python 코드를 동적으로 조작하는 기능으로 Python을 매우 강력한 언어로 만듭니다. 메타프로그래밍은 다음과 같은 방식으로 구현될 수 있습니다. 클래스 데코레이터: 클래스 데코레이터는 클래스 정의를 수정하는 데코레이터입니다. 클래스의 속성과 메서드를 추가하거나 수정하는 데 사용할 수 있으며 클래스의 인스턴스화 프로세스를 제어하는 데에도 사용할 수 있습니다. defadd_method_to_class(cls):defnew_method(self):print("Thisisanewmethod")setattr(cls,"new_method",new_method)returncls@a

php5가 포트 9000을 수신하지 않는 경우의 해결 단계: 1. PHP-FPM 구성 파일을 확인합니다. 2. PHP-FPM 서비스를 다시 시작합니다. 3. 방화벽을 끄거나 포트 전달을 구성합니다. 4. 다른 프로세스가 포트 9000을 사용하는지 확인합니다.

php7과 php5의 구문 차이점은 다음과 같습니다. 1. PHP7은 엄격한 유형 선언을 도입하지만 PHP5 변수 유형은 암시적입니다. 2. PHP7은 스칼라 유형 선언을 지원하지만 PHP5는 지원하지 않습니다. 3. PHP7은 NULL 병합 연산자를 도입합니다. PHP5는 변수가 존재하고 null이 아닌지 확인합니다. 조건문을 사용해야 합니다. 4. PHP7은 새로운 비교 연산자 "<=>"를 추가하지만 PHP5는 그렇지 않습니다. 5. PHP5는 새로운 기능인 익명 클래스를 도입합니다. 하지 않습니다.

PHP 매직 메소드의 실행 순서는 다음 규칙을 따릅니다. 우선 순위가 높은 매직 메소드가 먼저 실행됩니다. 하위 클래스와 상위 클래스가 모두 동일한 이름의 매직 메서드를 정의하는 경우 하위 클래스의 매직 메서드가 먼저 실행됩니다. 클래스가 동일한 이름을 가진 일반 메소드와 매직 메소드를 모두 정의하는 경우 일반 메소드가 먼저 실행됩니다.

매직 메소드란 무엇입니까? 라라벨에서는 어떻게 사용하나요? 다음 글에서는 Laravel에서 PHP 매직 메소드를 적용하는 방법을 소개하겠습니다. 도움이 되길 바랍니다.

인터넷 기술의 지속적인 발전으로 웹사이트와 애플리케이션에 대한 수요가 증가하고 있으며, 그 중 웹 개발의 중요한 도구인 PHP가 점차 알려지고 있습니다. PHP에서는 "마법 상수"에 대해 자주 듣습니다. 그렇다면 PHP에서 마법 상수란 무엇입니까? 매직 상수는 PHP 스크립트가 컴파일될 때 값이 결정되는 미리 정의된 상수입니다. 매직 상수는 LINE__, __FILE 및 CLA와 같이 두 개의 밑줄로 시작하고 끝납니다.
