class黑客new自己function(php)try{}catch{}双冒号的使用(::)php---面向对象的php编程

本文深入探讨PHP面向对象编程的基础概念,包括类、对象、属性、方法、构造函数及析构函数。并通过实例演示如何使用set和get方法管理对象状态,以及如何利用自定义异常类进行错误处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

学好数理化(面向对象),单身一辈子都不怕。

嘤嘤嘤-php面型对象

第一个例子引入面向对象

emmm偷菜鸟教程一个文章和例子

class Site{
	var $urll;
	var $title;

	function setUrl($par){
		$this->url = $par;
	}
	function getUrl(){
		echo $this->url . PHP_EOL;//变量$this表示自身的对象

	}
	function setTitle($par){
		$this->title = $par;

	}
	function getTitle(){
		echo $this->title . PHP_EOL;//PHP_EOL是一个换行符
	}


}

$runobb = new Site;
$taobao = new Site;
$google = new Site;
//三个独立的对象
$runobb->setTitle("菜鸟教程");
$taobao->setTitle("淘宝网");
$google->setTitle("谷歌搜索");	
//调用成员函数获取标题和url
$runobb->setUrl("www.cainiao.com");
$taobao->setUrl("www.taobao.com");
$google->setUrl("www.gootle");

$runobb->getUrl();
$taobao->getUrl();
$google->getUrl();

$runobb->getTitle();

我们可以这样去分析这个对象:

  1. 首先我们声明一个类叫做SIte
    其次我们在叫Site的类中创建两个成员变量
  2. 接着我们在这个变量下面创建两个自定义的function应该也叫做方法
  3. 我们的类方法对成员变量进行操作,分别是一个set设置成员方法的操作,一个是get获取。
  4. $this这是一个指定赋值,我们扩展一下:
lass User

{

public $name;

public function getName() {

echo $this->name;

}

}

//使用

$user1 = new User();

$user1->name = 'liming';

$user1->getName();//会输出'liming'

$user2 = new User();

$user2->name = 'xiwang';

$user2->getName();//输出'xiwang'

输出结果
在这里插入图片描述怎么理解这个this呢?其实我感觉在functio里面的this呢?其实我感觉在functio里面的thisfunctiothis是一个中转定义有点像a=1 b=a;其实赋值1给b但是中间函数有调整。
即:
当$this->name的时候
我们的对象->name是相同的操作,把名字的值赋值给这个对象,经过这个函数function进行输出动作。
那我们的函数就可以无所不能专注于处理参数,然后外部直接传入就可。

  1. 这里还有一个需要关注的点,就是在这段set;get,set;get的代码中,我们无法调整顺序执行,就是必须按照function中的顺序先set后get否则就会:
    在这里插入图片描述

    2. construct 团体传
    上代码:

class Person {             
    //下面是声明人的成员属性
    public $name;             //定义人的名字
    public $sex;                //定义人的性别
    public $age;                //定义人的年龄

    public function __construct($name = "",$sex = "",$age = "")
    {
    	$this->name = $name;
    	$this->sex = $sex;
    	$this->age = $age;
    }

    //下面是声明人的成员方法
    public function say(){          
         //在类中声明说话的方法,使用$this访问自己对象内部的成员属性
         echo "我的名字:".$this->name.", 性别:".$this->sex.", 年龄:".$this->age.".<br>";
    }
    
    //在类中声明另一个方法 
    public function run(){              
        echo $this->name."在走路<br>";    //使用$this访问$name属性
    }
    
    public function test(){
        $this->say();       //在此方法中调用其它方法
    }
    public function __destruct() {
        echo "再见".$this->name."<br>";
  	} 

}

$info = new Person("张三","男","18");
$info->test();

running:

![在这里插入图片描述](https://img-blog.csdnimg.cn/20200426202431906.png)

容易出错的地方

  • 在外部调用变量容易把->输入成"="
  • 在内部调用$$this−>name容易敲成this->name 容易敲成this>namethis−>this->this>$name
  • 另外就是在echo 输出字符串和对象的时候要注意句号的拼接位置
  • 还有一个折磨我半小时的问题尼玛
    在这里插入图片描述
    我淦尼玛,你看见这个这个是啥玩意了么???——————————————————————————————————————————————————————我就一个下横线没加它就一直报错,这人淦的事?
    不不不,他本来就不是人。

3.try

说到这里有想起一首歌木有??
Colbie Caillat的《Try》
you don’t have to try so hard~~~~
you don’t have to try try tyr…
you don’t give it all alway

算了,来正事
什么是php中的try?php要努力个或者要尝试个啥??
php中的错误回显函数try
php中的try{}catch{}是异常处理语句,在
try{
这里可以放你要执行的代码,如果被扫黄了那就对不起了
}catch{
这里就是你进来的小黑屋
}

由$e收集错误信息和显示,任何调用可能抛出异常的方法should使用这个try~
catch语句用来处理抛出的异常。

举个例子把:


function checkNum($number)
{
 	if($number>1)
  	{
  		throw new Exception("Value must be 1 or below");
  	}
 	return true;
}
try {
	checkNum(0);
	// $error = 'Always throw this error';
	// throw new Exception($error);   
	//创建一个异常对象,通过throw语句抛出
	// echo 'Never executed';       
	//从这里开始,try代码块内的代码将不会再被执行
} catch (Exception $e) {
	echo 'Caught exception: '.$e->getMessage()."\n";  
	//输出捕获的异常消息
}
echo 'Hello World';       //程序没有崩溃继续向下执行


我们不看注释语句先看未注释的语句。
分析:
在这里插入图片描述
流程图是个好东西。也就是说直接跳过了try的报错语句,那我们这次传入一个特殊符号看看??
其实后来我测试这个代码。。不论你check啥值都是echo helloworld的
sb

自定义的报错类

老大说了凡是牛比的cms都有自定义的报错类,所以以后你自己也必须写一个自定义的类

先来个代码压压惊:

class MyException extends Exception{
	//重定义构造器使第一个参数 message 变为必须被指定的属性
	public function __construct($message, $code=0){
	    //可以在这里定义一些自己的代码
	    //建议同时调用 parent::construct()来检查所有的变量是否已被赋值
	    parent::__construct($message, $code);
	}	
	public function __toString() {        
      	//重写父类方法,自定义字符串输出的样式
	  	return __CLASS__.":[".$this->code."]:".$this->message."<br>";
	}
	public function test() {    
         //为这个异常自定义一个处理方法
	     echo "按自定义的方法处理出现的这个类型的异常<br>";
	}
}
try { //使用自定义的异常类捕获一个异常,并处理异常
	$error = '允许抛出这个错误';       
	throw new MyException($error);    
     	//创建一个自定义的异常类对象,通过throw语句抛出
	echo 'Never executed'; 
	//从这里开始,try代码块内的代码将不会再被执行
} catch (MyException $e) {        //捕获自定义的异常对象
	echo '捕获异常: '.$e;        //输出捕获的异常消息
	$e->test();  //通过自定义的异常对象中的方法处理异常
}
echo '你好呀';    

这个得画一个流程图???

在分析这段代码的时候有点内容必须知道一下:

  1. throw和try和catch
    一个catch对应一个throw
    多个catch对应多个throuw
  2. 在一个throw抛出错误的时候异常处理函数会先走throw new exception(‘先走这里的句子????’)
    例子解释:
//创建可抛出一个异常的函数
function checkNum($number)
 {
 if($number>1)
  {
  throw new Exception("Value must be 1 or below");
  }
 return true;
 }

//在 "try" 代码块中触发异常
try
 {
 checkNum(2);
 //If the exception is thrown, this text will not be shown
 echo 'If you see this, the number is 1 or below';
 }

//捕获异常
catch(Exception $e)
 {
 echo 'Message: ' .$e->getMessage();
 }
创建 checkNum() 函数。它检测数字是否大于 1。如果是,则抛出一个异常。
    在 "try" 代码块中调用 checkNum() 函数。
checkNum() 函数中的异常被抛出
"catch" 代码块接收到该异常,并创建一个包含异常信息的对象 ($e)。
通过从这个 exception 对象调用 $e->getMessage(),输出来自该异常的错误消息

反正throw就是流氓,它丢出的信息先走catch,在catch里面走一圈先储存在对象里面然后有自定义函数输出
代码运行结果:
在这里插入图片描述
3. :: :: :: ::双冒号是什么意思??
:: 在php中是调用类的静态方法或者属性,常量的符号
代码:


class aaa{
static function ar(){
	echo "111我是ar";
}

function br(){}
}

// 使用非静态方版法,要先创建实例
$obj = new aaa();
$obj -> br();

// 使用静态方法,无需创建实例,直接使权用类名
aaa::ar(); 

running:

在这里插入图片描述
更多详细:

https://www.php.cn/php-weizijiaocheng-378631.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值