其实,这是一个非常容易解决掉的问题。在我看来,似曾相识,呵呵,最近学JavaScript可是学会了使用var声明变量。

在php开发过程中,由于不知道向谁求助而心慌意乱地判断以为自己不适合学php。其实错误在每个人学习过程中都会碰到的,千万不要妄自菲薄。很多错误在报错的代码提示中已经告诉我们了,仔细看,不会就百度。现总结一些常见的php错误,以共享php新人。
Php常见错误提示

php4 没有 静态成员

其实,在PHP中根本不需要使用var声明的,但是当一个变量作为一个类的成员变量的时候,使用var还是没有问题的。

一、Fatal error: Call to undefined function…… 函数不存在,可能的原因
1、系统不存在这个函数且你也没自定义
2、有人会问,我在别的机器上就不报错。那是因为环境不同,这个函数在本机没开,怎么开?你百度函数名字,就能查到这个函数属于哪个dll,去php.ini里开启。


在外部使用var就报错Parse error: syntax error, unexpected T_VAR
in…,例如我的出错信息:

实例讲解:PHP FATAL ERROR: CALL TO UNDEFINED FUNCTION
BCMUL()解决办法

php网页后台出现这样的错误,查过SubPages1.php并没有找到相应的错误。网站在自己本地测试完全正常,传到空间以后就出现这样的错误。连验证码都看不到了,类似的错误还有Parse
error: syntax error, unexpected T_STRING, expecting T_OLD_FUNCTION or
T_FUNCTION or T_VAR or ‘}’ in
/www/users/myhuashun.com.ufhost/admin/yanzhengma.php on line 6

Parse error: syntax error, unexpected T_VAR in
D:\Apache2.2\htdocs\shirdrn\page\p2\pageUtil.inc on line 34

在一台处理网络支付的服务器迁移的时候,发现不能支付。

2010-12-9 22:26
最佳答案

我在测试:在一个类的内部,使用一个自己定义的类对象作为这个类的成员时,出错了。

PHP环境: PHP版本为5.3.3
系统为Red Hat 4.1.2-54
查看apache的错误日志,发现是加密文件中一个函数bcmul()报错:

服务器是4.0版本的话
如果有“public”,就将“public”去掉。就不会出错,如果“public”
是定义变量的话,将“public” 改为“var”。

Address类对应的address.inc代码:

复制代码 代码如下:


复制代码 代码如下:

PHP Fatal error: Call to undefined function bcmul() in /php_rsa.php on
line xxx

<?php
class Address {
   var $road;
   function Address(){}
yzc579亚洲城官网,   function setRoad($road){
    $this->road = $road;
   }
}
?>

解决办法: 使用如下命令:

    
最近在做一个整站内容管理系统(见本站首页),另外还在做一个朋友的办公楼信息管理系统!老实说才用php进行开发半年多一点,经验很不足,不
过从事WEB的工龄也足足好几年了。最初接触php的时候还是php3,php3不支持session,也没有面象对象的概念,只有一大堆的函数!最初也
是在诸多web脚本中徘徊,asp,php,jsp已经是三足顶立了,当然perl,cgi对于那时还是初学者的学生来说太奢侈了。其实那时候也很喜欢那
一大堆的函数,就像当时学习dos的命令一样,但是比起asp来说php3没有session,没有面象对象,而众多小公司都在使用asp是最初不选择
php的原因,而php4最大的进步就是加入了面象对象的思想,增加了服务器与客户机之间的会话管理。现在国内大多的主机提供商都还停留在php4版本
上,但是php5可以说才算得上真正意义的有点模样的语言!
 
   
所以,重回php就是用php5进行开发,在我的机器上没有安装过php4的版本,但是在主机上却是php4的版本,所以开发过程中,我不得不小心翼翼,认真的了解他们之间的特性。

Person类及其测试代码为person.php如下:

复制代码 代码如下:

   
1、PHP4没有static,private,protect等修饰,所以开发出来的程序上传到主机上得把所有这些去掉!

复制代码 代码如下:

yum install php-bcmath

    2、PHP4中对像调用不能写成
$obj->method_a()->method_b();而PHP5可以,这句语句的意思就是调用$obj的method_a()方法,会返回一个对象,再执行对象的method_b()方法。
    那么我上传到我的主机上,我就得把所有这样的语句改成

<?php
require(“address.inc”);
class Person {
   var $name;
   var $address;
   function Person(){
   }
   function display(){
    echo “Name : “.$this->name.”<BR>”;
    echo “Road : “.$this->address->road.”<BR>”;
   }
}

就安装好了。

$tempobj=$obj->method_a();
$tempobj->method_b();

var $p = new Person();
$p->address = new Address();
$p->address->setRoad(“Chagnchun Road”);
$p->name = “Shirdrn”;
$p->display();
?>

如果出现下面这种情况:

       3、复杂字符串中变量解析中php5中可以解析对象的方法属性等,如:

测试输出现异常:

复制代码 代码如下:

$a=”{$db->isconnected}”;

Parse error: syntax error, unexpected T_VAR in
D:\Apache2.2\htdocs\shirdrn\page\p2\pageUtil.inc on line 34

Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.yun-idc.com
* extras: mirrors.yun-idc.com
* rpmforge: ftp.riken.jp
* updates: mirrors.yun-idc.com
Setting up Install Process
Resolving Dependencies
–> Running transaction check
—> Package php-bcmath.x86_64 0:5.1.6-40.el5_9 set to be updated
–> Processing Dependency: php-common = 5.1.6-40.el5_9 for package:
php-bcmath
–> Running transaction check
—> Package php-common.x86_64 0:5.1.6-40.el5_9 set to be updated
–> Processing Conflict: php53-common conflicts php-common
–> Finished Dependency Resolution
php53-common-5.3.3-13.el5_9.1.x86_64 from installed has depsolving
problems
–> php53-common conflicts with php-common
Error: php53-common conflicts with php-common
You could try using –skip-broken to work around the problem
You could try running: package-cleanup –problems
package-cleanup –dupes
rpm -Va –nofiles –nodigest

      而php4不能正确运行。
      4、PHP5中可以用构造和析构魔术函数如:

就是因为在person.php代码中使用var声明变量,PHP中是不能这样的,只要使用“$”符号起始就表示这个字符后面的是一个PHP变量。
呵呵:-)

就需要使用yum update 之后再yum install php53-bcmath就好了

<?php
class MyDestructableClass {
   function __construct() {
       print “In constructor\n”;
       $this->name = “MyDestructableClass”;
   }

其它网友的补充方法:

顺便了解了一下,bcmath这个函数是PHP数学扩展中的一个。可以使用 bcscale()
来设置全局默认的小数位数,具体用法如下:

   function __destruct() {
       print “Destroying ” . $this->name . “\n”;
   }
}

问题解决:syntax error, unexpected T_STRING, expecting T_OLD_FUNCTION
or T_FUNCTION or T_VAR or
前两天开始自己php之旅,做一个很普通的网站,结果我们的php是5.0版本,服务器是4.0版本,纳闷死咯。
昨天忙了一天,今天早上一来,在一篇文章发现了,解决方法。Parse error:
syntax error, unexpected T_STRING, expecting T_OLD_FUNCTION or
T_FUNCTION or T_VAR or ‘}’
,如果有“public”,就将“public”去掉。就不会出错,如果“public”
是定义变量的话,将“public” 改为“var”。

复制代码 代码如下:

$obj = new MyDestructableClass();
?>

您可能感兴趣的文章:

  • PHP
    的异常处理、错误的抛出及回调函数等面向对象的错误处理方法
  • PHP如何抛出异常处理错误
  • php中try
    catch捕获异常实例详解
  • PHP的异常处理类Exception的使用及说明
  • php Try Catch异常测试
  • PHP中的错误处理、异常处理机制分析
  • php中异常处理方法小结
  • php异常:Parse error: syntax error, unexpected
    T_ENCAPSED_AND_WHITESPACE eval()”d code
    error
  • php更新mysql后获取影响的行数发生异常解决方法
  • php抛出异常与捕捉特定类型的异常详解

string bcmul ( string $left_operand , string $right_operand [, int
$scale ] )

   
而php4中没有,只有与类名同名的函数就是构造函数,而且对与类名同名的构造函数。

例子:

  
 php5在php4上还增加了很多,如pdo等,php6可能做了更多的扩展(现在还没有试用php6),想php会越来强大,越来越适合基于WEB的开发。

<?php
echo bcmul('1.34747474747', '35', 3); // 47.161
echo bcmul('2', '4'); // 8
?>

此函数在php.ini中的选项:

复制代码 代码如下:

[bcmath]
; Number of decimal digits for all bcmath functions.
;
bcmath.scale = 0

二、syntax error, unexpected T_STRING, expecting…… 严重语法错误,例如syntax error, unexpected T_STRING, expecting ‘,’ or
‘;’ in F:\phpnow\htdocs\index.php on line 4
后边标着行号,自己去检查那一行的标点就行

如果是 第三行 echo 1 后边没加;,报错会报 on line 4 ,on line
4,就是第四行

实例讲解:

其实,这是一个非常容易解决掉的问题。在我看来,似曾相识,呵呵,最近学JavaScript可是学会了使用var声明变量。

其实,在PHP中根本不需要使用var声明的,但是当一个变量作为一个类的成员变量的时候,使用var还是没有问题的。

在外部使用var就报错Parse error: syntax error, unexpected T_VAR
in…,例如我的出错信息:

Parse error: syntax error, unexpected T_VAR in
D:\Apache2.2\htdocs\shirdrn\page\p2\pageUtil.inc on line 34

我在测试:在一个类的内部,使用一个自己定义的类对象作为这个类的成员时,出错了。

Address类对应的address.inc代码:

<?php
class Address {
var $road;
function Address(){}
function setRoad($road){
$this->road = $road;
}
}
?>

Person类及其测试代码为person.php如下:

<?php
require("address.inc");
class Person {
var $name;
var $address;
function Person(){
}
function display(){
echo "Name : ".$this->name."<BR>";
echo "Road : ".$this->address->road."<BR>";
}
}

var $p = new Person();
$p->address = new Address();
$p->address->setRoad("Chagnchun Road");
$p->name = "Shirdrn";
$p->display();
?>

测试输出现异常:

Parse error: syntax error, unexpected T_VAR in
D:\Apache2.2\htdocs\shirdrn\page\p2\pageUtil.inc on line 34

就是因为在person.php代码中使用var声明变量,PHP中是不能这样的,只要使用“$”符号起始就表示这个字符后面的是一个PHP变量。
呵呵:-)
其它网友的补充方法:
问题解决:syntax error, unexpected T_STRING, expecting T_OLD_FUNCTION
or T_FUNCTION or T_VAR or
前两天开始自己php之旅,做一个很普通的网站,结果我们的php是5.0版本,服务器是4.0版本,纳闷死咯。
昨天忙了一天,今天早上一来,在一篇文章发现了,解决方法。Parse error:
syntax error, unexpected T_STRING, expecting T_OLD_FUNCTION or
T_FUNCTION or T_VAR or ‘}’
,如果有“public”,就将“public”去掉。就不会出错,如果“public”
是定义变量的话,将“public” 改为“var”。

三、Parse error: syntax error, unexpected T_VARIABLE in XXX.php on
line XXX

这条语句是PHP常见的报错,一般是在XXX行的上一行,或者是XXX行,缺少分号。或者在双引号中使用双引号,且没有转义等等。
解决方法:找到XXX.php的XXX行,按照上面的分析,找到自己的错误,改正即可。
贴士:作为编程人员,要做到代码严谨,思维清晰,并且细心。人非圣贤孰能无过,但尽量避免这些因为粗心出现的错误,这样才能成为合格的程序员。

四、Parse error: syntax error, unexpected ‘X’ in XXX.php on line XXX

这条语句依然是PHP常见的报错,报错原因是在XXX.php的XXX行,出现了PHP无法识别的字符。常常是因为function,if等需要‘{‘、‘}’的地方没有闭合,或者在编程的时候,不小心在‘;’的后面误打了几个字符。
解决方法:找到XXX.php的XXX行,删除多出的字符,添加缺少的字符即可。

五、syntax error, unexpected $end  逻辑忘了闭合 
这个报错还有个特征,他会提示你最后一行代码报错,譬如你一共30行,他就告诉你
on line
30,这时候你别检查第三十行,你要把30行挨个,检查一遍,看看哪个标签没闭合。
一共3000行,他就告诉你 on line
3000,这时候你别检查这3000行了,如果你程序排版很乱,在3000行里找哪个括号是个很麻烦的事……我教你一招:ctrl+a ctrl+d alt+f4
好了,你现在可以重写了。

另一种思路:

Parse error: syntax error, unexpected $end in script.php on line xx
调试了一会后发现产生错误的行是文件中间某行
//$str .= “?>\n”;
想起来了 PHP 解释器允许的结尾标记那行还可以用单行注释,即 //$str .=
“?>\n”; 被解释成结尾标记前有注释,注释的内容是 //$str .= “,而 ?>
后面的 \n”; 会被解释作 PHP 块外的内容按 HTML 输出出去!结果是给 $str .=
“?>\n”; 这行添加 // 成注释后,反而多了个 ?>
的结束标记,造成原来真正的结束标记成了意料之外的(unexpected)了。
解决办法就是直接删掉这一行即可。
PHP 开始和结束标记所在行别写其它东西,是个好习惯。

六、Notice:Undefined varialbe:…… 这是一个比较常见的错误,解决方法:error_reporting调整错误级别,

以上就是为大家分享的PHP常见的6个错误提示,给大家提供了大概的解决思路和方向,希望对大家的学习有所帮助。

您可能感兴趣的文章:

  • php数组添加元素方法小结
  • 基于php双引号中访问数组元素报错的解决方法

Author

发表评论

电子邮件地址不会被公开。 必填项已用*标注