php Exception打印error trace 实例

 更新时间:2016年11月25日 15:45  点击:1659
本文章来给各位同学介绍关于php Exception打印error trace 实例,有需要的朋友可进入参考。


对于php的Exception,可以通过getTraceAsString获得错误栈。


而对于error则应该如下:

 代码如下 复制代码

function x()
 $x = debug_backtrace();
 //remove stack of this function
 array_shift($x);
 $i = 0;
 $xstr = '';
 foreach ($trace as $x) {
  //TODO need check exists args
  $args = $x['args'];
  if (!$args) {
   $argstr = '';
  } else {
   $argstr = '';
   $first = true;
   foreach ($args as $arg) {
    if (!$first) {
     $argstr .= ',';
    }
    $first = false;
    if (is_object($arg)) {
     $argstr .= 'Object[' . get_class($arg) . ']';
    }
    elseif (is_array($arg)) {
     $argstr .= 'Array';
    } else {
     $argstr .= $arg;
    }
   }
  }
  $xstr .= "[#$i] {$x['file']}({$x['line']}) {$x['function']} ($argstr)" . PHP_EOL;
  $i++;
 }

 return $xstr;
}

在php中条件控制语包括了if语句、swicth语句、三无操作符等下面小编来给大家总结它们三个在php中的一些应用实例了,希望此教程对各位朋友有所帮助。

PHP条件控制语句一共有三种:

第一种:if语句;

第二种:switch语句;

第三种:三元操作符;

分别讲解下这三种条件控制语句。

第一种:if语句。


if语法有以下几种格式:

1)、

if (表达式一) {  //满足条件执行以下程序段

执行语句;
}

例如:

 代码如下 复制代码

<?php

if ($a > $b) {
echo "a is bigger than b";
$b = $a;
}
?>

2)、

if (表达式一){   //满足条件执行以下程序段

执行语句;

}

else{        //不满足执行如下程序段

执行语句;

}

例如:

 代码如下 复制代码

<?php
if ($a > $b) {
echo "a is bigger than b";
} else {
echo "a is NOT bigger than b";
}
?>

3)、if (表达式一) {   //满足条件执行以下程序段

}elseif  (表达式二)  {

}else {

}

例如:

 代码如下 复制代码

<?php

$a=45;

$b=50;

if ($a>$b)      {  print  “a大于b”;  }

elseif ($a==$b)      {  print  “a等于b”;  }

else      {  print “a小于b”;  }

?>

 

第二种:switch语句。

Switch是多路分支语句,虽然可以通过多重嵌套的if语句来实现多路分支,但嵌套越深,程序的可读性越差。使用 Switch 语句可以避免冗长的 if..elseif..else 代码块。

Switch语句的语法

switch (var) {
case 值1:
语句1;
   break;
case 值2:

语句2;
   break;
case 值N:

语句N;
   break;
default:

语句;

}

例如:

 代码如下 复制代码

<?php

$i=1;

switch ($i) {
case 0:
echo  "i equals 0";
break;
case 1:
echo   "i equals 1";
break;
case 2:
echo   "i equals 2";
break;

default:
echo   "i no equals";
break;
}
?>

第三种:三元操作符。

PHP脚本语言支持操作符?:,它是if语句的紧凑版本。我们可以用下面的实例来对该三元操作符进行解释:


三元操作符语法:

(条件)?’执行语句1′:’执行语句2′;

解释为:如果条件为TRUE则执行语句1,如果条件为FALSE则执行语句2;

例如:

 代码如下 复制代码

echo  ($a>$b)?“a大于b”:“a不大于b”;

解释为:

如果$a>$b,则输入a大于b;如果$a<$b,则输入a不大于b。

要实现计算器我们可以利用php中相关数学操作函数及相关数组来进行操作了,这个个人只是好玩写的并且无实用,计算器个人觉得js的最好。

php计算器

 代码如下 复制代码

<html>
    <head>
        <title>PHP实现简单计算器</title>
        <meta http-equiv="Content-Type" content="text/html;charset=gb2312">
    </head>
<?php
    $num1=true;
    $num2=true;
    $numa=true;
    $numb=true;
    $message="";
    //单路分支
    if(isset($_GET["sub"])){
        if($_GET["num1"]==""){
            $num1=false;
            $message.="第一个数不能为空";

        }
        if(!is_numeric($_GET["num1"])){
            $numa=false;
            $message.="第一个数不是数字";
        }

        if($_GET["num2"]==""){
            $num2=false;
            $message.="第二个数不能为空";

        }
        if(!is_numeric($_GET["num2"])){
            $numb=false;
            $message.="第二个数不是数字";
        }

        if($num1 && $num2 && $numa && $numb) {
            $sum=0;
            //多路分支switch
            switch($_GET["ysf"]){
                case "+":
                    $sum=$_GET["num1"]+$_GET["num2"];
                    break;
                case "-":
                    $sum=$_GET["num1"]-$_GET["num2"];
                    break;
                case "x":
                    $sum=$_GET["num1"]*$_GET["num2"];
                    break;
                case "/":
                    $sum=$_GET["num1"]/$_GET["num2"];
                    break;
                case "%":
                    $sum=$_GET["num1"]%$_GET["num2"];
                    break;
            }
        }
    }
?>
<br /><b>Notice</b>:  Undefined index:  num1 in <b>
D:\php\PHPnow1.5.5\Package\vhosts\127.0.0.1\ceshi\jsq.php</b>
on line <b>64</b><br />
    <body>
        <table align="center" border="1" width="500">
            <caption><h1>计算器</h1></caption>
            <form action="jsq.php">
            <tr>
                <td>
                    <input type="text" size="5" name="num1" value="<?php echo $_GET["num1"] ?>" >
                </td>
                <td>
                    <select name="ysf">
                        <option value="+" <?php if($_GET["ysf"]=="+") echo "selected" ?>>+</option>
                        <option value="-" <?php if($_GET["ysf"]=="-") echo "selected" ?>>-</option>
                        <option value="x" <?php echo $_GET["ysf"]=="x"?"selected":"" ?>>x</option>
                        <option value="/" <?php echo $_GET["ysf"]=="/"?"selected":"" ?>>/</option>
                        <option value="%" <?php echo $_GET["ysf"]=="%"?"selected":"" ?>>%</option>
                    </select>
                </td>
                <td>
                    <input type="text" size="5" name="num2" value="<?php echo $_GET["num2"] ?>">
                </td>
                <td>
                    <input type="submit" name="sub" value="计算">
                </td>
            </tr>

            <?php
                if(isset($_GET["sub"])){

                    echo '<tr><td colspan="5">';
                    if($num1 && $num1 && $numa && $numb){
                        echo "结果:".$_GET["num1"]." ".$_GET["ysf"]." ".$_GET["num2"]." = ".$sum;
                    }else{
                        echo $message;
                    }
                    echo '</td></tr>';
                }
            ?>
            </form>
            </table>

    </body>
</html>

js计算器

 代码如下 复制代码

<html>
<head>
<title>计算器</title>
<script>
<!--
willclear=false //这个变量作为下一次输入是否先清空输入框的状态标志
function backspace(){ //退格
Calc.Input.value = Calc.Input.value.substring(0,Calc.Input.value.length-1)
Calc.Input.title = Calc.Input.value.substring(0,Calc.Input.title.length-1)
}//取长度为原长度减一的串,实现退格效果。
function addoperator(){  //加操作符
if (willclear){  //如果这次输入前需要清空输入框
willclear=false   //先清除标志,避免下次再次被错误地重复清空
clearinput()  //清除输入内容
}
Calc.Input.value += event.srcElement.innerText //给用于显示的加上刚输入的运算符
Calc.Input.title += event.srcElement.name //给用于计算的表达式区加上刚输入的运算符
}

function clearinput(){  //清除输入
Calc.Input.value=''  //清空显示区
Calc.Input.title=''  //清空表达式
}

function result(){ //用于计算结果
Calc.Input.value = eval(Calc.Input.title)//执行表达式区的表达式,返回结果到显示区。
willclear=true//设定下次按键则先清除此次计算结果。
}
//-->
</script>

<style>
button {width:40; border: 1 solid #808080;background-color: #FFFFFF}
</style>
</head>
<body>
<FORM NAME="Calc">
   <TABLE BORDER=4 bordercolorlight="#808080" bordercolor="#808080" width="250" height="38"><TR><TD width="291" height="39" bgcolor="#C0C0C0">
    &nbsp; 
    <INPUT TYPE="text" NAME="Input" readonly Size="21" style="background-color: #F5F5F5; font-family: Arial; border: 1 solid #000000">&nbsp
    <button NAME="back" OnClick="backspace()">←</button>
   </TD></TR><TR><TD width="291" height="38"> 
    <table border="0" width="100%" height="105" cellpadding="0"> 
      <tr> 
        <td width="25%" height="31" align="center" bgcolor="#C0C0C0"> 
    <BUTTON NAME="1" OnClick="addoperator()">1</BUTTON>
        </td> 
        <td width="25%" height="31" align="center" bgcolor="#C0C0C0"> 
    <BUTTON NAME="2" OnClick="addoperator()">2</BUTTON>
        </td> 
        <td width="25%" height="31" align="center" bgcolor="#C0C0C0"> 
    <BUTTON NAME="3" OnClick="addoperator()">3</BUTTON>
        </td> 
        <td width="25%" height="31" align="center" bgcolor="#C0C0C0"> 
    <BUTTON NAME="+" OnClick="addoperator()">+</BUTTON>
        </td> 
      </tr> 
      <tr> 
        <td width="25%" height="31" align="center" bgcolor="#C0C0C0"> 
    <BUTTON NAME="4" OnClick="addoperator()">4</BUTTON>
        </td> 
        <td width="25%" height="31" align="center" bgcolor="#C0C0C0"> 
    <BUTTON NAME="5" OnClick="addoperator()">5</BUTTON>
        </td> 
        <td width="25%" height="31" align="center" bgcolor="#C0C0C0"> 
    <BUTTON NAME="6" OnClick="addoperator()">6</BUTTON>
        </td> 
        <td width="25%" height="31" align="center" bgcolor="#C0C0C0"> 
    <BUTTON NAME="-" OnClick="addoperator()">-</BUTTON>
        </td> 
      </tr> 
      <tr> 
        <td width="25%" height="31" align="center" bgcolor="#C0C0C0"> 
    <BUTTON NAME="7" OnClick="addoperator()">7</BUTTON>
        </td> 
        <td width="25%" height="31" align="center" bgcolor="#C0C0C0"> 
    <BUTTON NAME="8" OnClick="addoperator()">8</BUTTON>
        </td> 
        <td width="25%" height="31" align="center" bgcolor="#C0C0C0"> 
    <BUTTON NAME="9" OnClick="addoperator()">9</BUTTON>
        </td> 
        <td width="25%" height="31" align="center" bgcolor="#C0C0C0"> 
    <BUTTON NAME="*" OnClick="addoperator()">×</BUTTON>
        </td> 
      </tr> 
      <tr> 
        <td width="25%" height="31" align="center" bgcolor="#C0C0C0"> 
    <BUTTON NAME="clear" OnClick="clearinput()">C</BUTTON>
        </td> 
        <td width="25%" height="31" align="center" bgcolor="#C0C0C0"> 
    <BUTTON NAME="0" OnClick="addoperator()">0</BUTTON>
        </td> 
        <td width="25%" height="31" align="center" bgcolor="#C0C0C0"> 
    <BUTTON NAME="=" OnClick="result()">=</BUTTON>
        </td> 
        <td width="25%" height="31" align="center" bgcolor="#C0C0C0"> 
    <BUTTON NAME="/" OnClick="addoperator()">÷</BUTTON>
        </td> 
      </tr> 
    </table> 
   </TD></TR> 
   </TABLE> 
   </FORM> 
</body> 
</html> 

数组元素删除有很多种情况,一种是删除第一个元素或随意一个元素或删除数组中空元素,下面我总结一下删除数组元素的一些实例

实例一

 代码如下 复制代码


//删除数组中的一个元素
function array_remove_value(&$arr, $var){
foreach ($arr as $key => $value) {
if (is_array($value)) {
array_remove_value($arr[$key], $var);
} else {
$value = trim($value);
if ($value == $var) {
unset($arr[$key]);
} else {
$arr[$key] = $value;
}
}
}
}

实例二

array_flip() 删除数组重复元素


如:

 代码如下 复制代码

$arr1 = array (”age” => 30, “name” => “快乐园”, “age” => 20);
$arr1 = array_flip($arr1); //$arr1 变成了 array(”快乐园” => “name”, 20 => “age”);
//再把 $arr1 的键名与值还复:
$arr1 = array_flip($arr1);

上面的代码写得简洁一些就是:

$arr1 = array_flip(array_flip($arr1));


实例三

array_pop 删除数组的最后一个元素

 代码如下 复制代码

$user=array('apple','banana','orange');
$result=array_pop($user);
print_r($result);
print_r($user);

删除数组中指定值的元素


一、利用foreach和unset()函数删除数组中的特定元素

 代码如下 复制代码

foreach($array as $k=>$v){
if($v == 'day'){
unset($array[$k]):
}
}

unset()函数即删除指定的数组值。

二、利用array_flip()函数和unset()函数删除数组中的特定值

 代码如下 复制代码

$arr = array_flip($arr);
unset($arr['world']);
$arr = array_flip($arr);
print_r($arr);

在php中写文件有几种,一种是利用fopen与fwirte函数实现,另一种是利用file_put_contents实现读写,下面我来介绍它们用法。

方法一,利用fopen与fwirte函数实现

1,PHP如何打开文件

使用PHP函数fopen()打开一个文件,fopen()一般使用2个参数表示打开文件的路径和文件模式。比如:

 代码如下 复制代码
$fp=fopen("../cnbruce.txt",'w');

 

其中 "../cnbruce.txt" 就表示打开的cnbruce.txt文件的路径(相对当前执行程序文件的路径),'w'表示以只写的方式打开该文本文件。

写文件用


fwrite(file,string,length)

参数说明:

file 必需。规定要写入的打开文件。

string 必需。规定要写入文件的字符串。

length 可选。规定要写入的最大字节数。


 代码如下 复制代码

/**
 * 写文件函数
 *
 * @param string $filename 文件名
 * @param string $text 要写入的文本字符串
 * @param string $openmod 文本写入模式('w':覆盖重写,'a':文本追加)
 * @return boolean
 */
function write_file($filename, $text, $openmod = 'w') {
 if (@$fp = fopen($filename, $openmod)) {
  flock($fp, 2);
  fwrite($fp, $text);
  fclose($fp);
  return true;
 } else {
  return false;
 }
}

方法二,利用file_put_contents实现读写

file_put_contents函数有个参数LOCK_EX非常有用,加上它之后,再也没有出现过内容缺失的情况了。

这个参数LOCK_EX的意思很直白,就是写文件时,先锁上这个文件,这样只允许某个客户端访问的时候写,其他客户端访问不能写了。

我的用法如下:

 代码如下 复制代码

file_put_contents($file, $content, FILE_APPEND|LOCK_EX)

解释:

$file=>这个是写入文件的路径+文件名
$content=>这个是写入文件的内容
FILE_APPEND=>直接在该文件已有的内容后面追加内容
LOCK_EX=>写文件的时候先锁定,防止多人同时写入造成内容丢失 

[!--infotagslink--]

相关文章

  • Go应用中优雅处理Error的技巧总结

    在程序员中,尤其是go新手,经常听到的一个讨论话题是:如何处理错误,这篇文章主要给大家介绍了关于Go应用中优雅处理Error的一些相关技巧,需要的朋友可以参考下...2021-09-08
  • js实现浏览器打印功能的示例代码

    这篇文章主要介绍了js如何实现浏览器打印功能,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下...2020-07-15
  • 解决Docker中的error during connect异常情况

    这篇文章主要介绍了解决Docker中的error during connect异常情况,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-11-22
  • vue实现页面打印自动分页的两种方法

    这篇文章主要为大家详细介绍了vue实现页面打印自动分页的两种方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-09-29
  • c# 获取已安装的打印机并调用打印文件

    这篇文章主要介绍了c#如何获取已安装的打印机并调用打印文件,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下...2020-12-08
  • error LNK2019: 无法解析的外部符号 问题的解决办法

    error LNK2019: 无法解析的外部符号 问题的解决办法,需要的朋友可以参考一下...2020-04-25
  • Springboot+MDC+traceId日志中打印唯一traceId

    本文主要介绍了Springboot+MDC+traceId日志中打印唯一traceId,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-10-17
  • 关于MySQL绕过授予information_schema中对象时报ERROR 1044(4200)错误

    这篇文章主要介绍了关于MySQL绕过授予information_schema中对象时报ERROR 1044(4200)错误,本文给大家分享解决方法,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-10-17
  • 快速理解MySQL中主键与外键的实例教程

    主键与外键的关系,通俗点儿讲,我现在有一个论坛,有两张表,一张是主贴 thread,一张是回帖 reply先说说主键,主键是表里面唯一识别记录的字段,一般是帖子id,体现在访问的时候,例如是 thread.php&#63;id=1 表示我要访问的是帖子...2015-11-24
  • yii添删改查实例

    一、数据访问对象 (DAO)YiiDAO 基于 PHP Data Objects (PDO) 构建。它是一个为众多流行的DBMS提供统一数据访问的扩展,这些 DBMS 包括MySQL, PostgreSQL 等等。因此,要使用 Yii DAO,PDO 扩展和特定的 PDO 数据库驱动(例如...2015-11-24
  • c# 接口使用实例

    这篇文章主要介绍了c#接口使用的实例,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下...2020-07-17
  • C#操作excel打印的示例

    这篇文章主要介绍了C#操作excel打印的示例,帮助大家利用c#打印表格,提高办公效率,感兴趣的朋友可以了解下...2020-12-08
  • C#基本打印事件用法实例

    这篇文章主要介绍了C#基本打印事件用法,实例分析了C#中print打印及DrawString文本字符串绘制等相关技巧,需要的朋友可以参考下...2020-06-25
  • window.onerror()的用法与实例分析

    目前在做window.onerror时上报js错误信息的事,整理下相关资料,需要的朋友可以参考下...2016-01-29
  • C# 实现简单打印的实例代码

    C# 实现简单打印的实例代码,需要的朋友可以参考一下...2020-06-25
  • MySQL ERROR 1045 (28000) 错误的解决办法

    这篇文章主要介绍了MySQL ERROR 1045 (28000) 错误的解决办法,很实用的解决方法,感兴趣的小伙伴们可以参考一下...2016-06-24
  • C#中的IEnumerable简介及简单实现实例

    这篇文章主要介绍了C#中的IEnumerable简介及简单实现实例,本文讲解了IEnumerable一些知识并给出了一个简单的实现,需要的朋友可以参考下...2020-06-25
  • sql server数据库中raiserror函数用法的详细介绍

    这篇文章主要介绍了sql server数据库中raiserror函数用法的详细介绍,raiserror用于抛出一个异常或错误,让这个错误可以被程序捕捉到。对此感兴趣的可以了解一下...2020-12-08
  • web打印 window.print()介绍

    web打印 window.print()介绍,需要的朋友可以参考一下...2020-06-25
  • json error: Use of overloaded operator [] is ambiguous错误的解决方法

    今天小编就为大家分享一篇关于json error: Use of overloaded operator [] is ambiguous错误的解决方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧...2020-04-25