热搜:NVER node 开发 php

按照书上的写了个计算图形面积的程序,但是不执行计算,请问哪里出错了

2024-09-06 20:10:01
按照书上的写了个计算图形面积的程序,但是不执行计算,请问哪里出错了

《细说php》第8章的最后一个例子。可以创建表单,但是点击计算之后出错误。请各位大侠指点迷津
接口:class__Shape.php
<?php
    interface Shape{
     function area();
     function perimeter();
    }
?>
矩形:class__Rect.php
<?php
class Rect implements Shape{
private $width;
private $length;

function __construct($size=""){
$this->width=$size["width"];
$this->length=$size["length"];
}
function area(){
return $this->length * $this->width;
}
function perimeter(){
return 2 * ($this->width + $this->length);
}
}
?>
三角形:class__Triangle.php
<?php
class Triangle implements Shape{
private $length1;
private $length2;
private $length3;

function __construct($size=""){
$this->length1 = $size["length1"];
$this->length2 = $size["length2"];
$this->length3 = $size["length3"];
}
function area(){
$s = ($this->length1 + $this->length2 + $this->length3)/2;
return sqrt($s * ($s - $this->length1) * ($s - $this->length2) * ($s - $this->length3));
}
function perimeter(){
return $this->length1 + $this->length2 + $this->length3;
}
}
?>
圆形:class__Circle.php
<?php
class Circle implements Shape{
private $radius;

function __construce($size=""){
$this->radius = $size["radius"];
}
function area(){
return pi() * $this->radius * $this->radius;
}
function perimeter(){
return 2* pi() * $this->radius;
}
}
?>
表格:class__Form.php
<?php
class Form{
private $formName;
private $request;
private $action;
private $method;
private $target;

function __construct($formName,$request,$action="index.php",$method="get",$target="_self"){
$this->formName=$formName;
$this->request=$request;
$this->action=$action;
$this->method=$method;
$this->target=$target;
}
function __toString(){
$str="

";
$str.="";
$str.="";
break;
case 2:
$str.="";
$str.="";
$str.="";
break;
case 3:
$str.="";
break;
}
$str.="";
$str.="request["action"].">";
$str.="request["action"].">";
$str.="

".$this->formName."

";
$str.="
action."method=".$this->method."target=$this->target";

switch ($this->request["action"]){
case 1:
$str.="
矩形长度: ";
$str.="request["length"].">
矩形宽度: ";
$str.="request["width"].">
三角形边长1: ";
$str.="request["length1"].">
三角形边长2: ";
$str.="request["length2"].">
三角形边长3: ";
$str.="request["length3"].">
圆形半径: ";
$str.="request["radius"].">
";

return $str;
}
}
?>
控制程序:index.php


图形计算器


<?php
function __autoload($className){
include ('class__'.ucfirst($className).'.php');
}
?>

图形周长和面积计算器



矩形||
三角形||
圆形


<?php
switch ($_REQUEST["action"]){
case 1:
$form=new Form("矩形",$_REQUEST,"index.php");
echo $form;
break;
case 2:
$form=new Form("三角形",$_REQUEST,"index.php");
echo $form;
break;
case 3:
$form=new Form("圆形",$_REQUEST,"index.php");
echo $form;
break;
default:
echo "请选择一个图形
";
}

if(isset($_REQUEST["act"])){
switch($_REQUEST["act"]){
case 1:
$shape=new Rect($_REQUEST);
break;
case 2:
$shape=new Triangle($_REQUEST);
break;
case 3:
$shape=new Circle($_REQUEST);
break;
}
echo "面积为:".$shape->area()."
";
echo "周长为:".$shape->perimeter()."
";
}
?>



回复讨论(解决方案)

没人看?都还没睡醒吗?

class__Form.php 中
$str.="

action."method=".$this->method."target=$this->target";
应为
$str.="
action." method=".$this->method." target=$this->target";
少抄了空格

class__Circle.php 中
function __construce($size=""){
应为
function __construct($size=""){
抄错了一个字符

$str.="target";


这句话就有问题了,action是index.php,而method是参数,却直接和index连到一起了。。。
index.phpmethod=
改成这样:
index.php?method=
function __construct($formName,$request,$action="index.php",$method="get",$target="_self"){
$this->formName=$formName;
$this->request=$request;
$this->action=$action.'?';
$this->method=$method;
$this->target=$target;
}

另外,觉得你的那个圆形貌似有问题,都没传参数。
纯肉眼再看,瞎猜,有问题再说~

竟然有人先回复了,还没看到。。。惭愧

class__Form.php 中
$str.="target";
应为
$str.="ta……

我修改了之后,圆形和三角形都能输出,可是矩形不能输出

不会吧?我测试的时候没有发现“矩形”有问题呀

不会吧?我测试的时候没有发现“矩形”有问题呀
能成功创建表单,但是点“计算”之后没反应呢。另外,
$str.="";
$str.="";
这两个是干什么用的啊?

如果你不是在 windows 下测试,那么你需要注意文件名中的大小写
class__Rect.php 不能是 class__rect.php 或其他

action 用于控制表单加载
act 用于控制类加载

如果你不是在 windows 下测试,那么你需要注意文件名中的大小写
class__Rect.php 不能是 class__rect.php 或其他

action 用于控制表单加载
act 用于控制类加载
是windows,大小写也区分了,在你的电脑上测试没问题吗?

我测试肯定没有问题,不然我怎么告诉你哪儿有问题呢?

引用 8 楼 xuzuning 的回复:如果你不是在 windows 下测试,那么你需要注意文件名中的大小写
class__Rect.php 不能是 class__rect.php 或其他

action 用于控制表单加载
act 用于控制类加载
是windows,大小写也区分了,在你的电脑上测试没问题吗?
你的代码我也可以运行,包括矩形

我又重新写了一遍,这次三角形又不输出了。晕了,问题到底出在哪呢?
class__form.php:
<?php
//表格类,根据不同的选择,创建不同的表格,可选择的有矩形,圆形和三角形。
class Form{
//声明表格的成员属性
private $formName;//表单的名称
private $request;//表单提供的变量,数组类型
private $action;//数据提交到的页面
private $method;//提交的方式
private $target;//新页面打开的方式,默认为_self

function __construct($formName,$request,$action="index.php",$method="get",$target="_self"){
$this->formName=$formName;
$this->request=$request;
$this->action=$action;
$this->method=$method;
$this->target=$target;
}
function __toString(){
$str="

";
break;
case 2:
$str.="";
break;
case 3:
$str.="";
break;
}
$str.="";
$str.="";
$str.="";
$str.="

计算".$this->formName."的面积和周长

";
$str.="";

switch($this->request["action"]){
case 1:
$str.="
矩形长度:";
$str.="";
$str.="
矩形宽度:";
$str.="";
$str.="
三角形第一条边长:";
$str.="";
$str.="
三角形第二条边长:";
$str.="";
$str.="
三角形第三条边长:";
$str.="";
$str.="
圆形半径:";
$str.="";
$str.="
";

return $str;
}
}
?>
index.php:


<br /> 计算图形的面积和周长 <br />


<?php
function __autoload($className){//包含到类时,自动加载到本页
include ("class__".ucfirst($className).".php");//自动加载相应的类所在的文件
}
?>

矩形||
三角形||
圆形


<?php
switch($_REQUEST["action"]){
case 1:
$form=new Form("矩形",$_REQUEST,"index.php");
echo $form;
break;
case 2:
$form=new Form("三角形",$_REQUEST,"index.php");
echo $form;
break;
case 3:
$form=new Form("圆形",$_REQUEST,"index.php");
echo $form;
break;
}

if(isset($_REQUEST["act"])){
switch ($_REQUEST["act"]){
case 1:
$shape=new Rect($_REQUEST);
break;
case 2:
$shape=new Triangle($_REQUEST);
break;
case 3:
$shape=new Circle($_REQUEST);
break;
}
echo "面积:".$shape->area()."
";
echo "周长:".$shape->perimeter()."
";
}
?>


其他的代码没有变,到底问题出在哪啊??

class__Form.php

<?phpclass Form{private $formName;private $request;private $action;private $method;private $target;function __construct($formName,$request,$action="index.php",$method="get",$target="_self"){$this->formName=$formName;$this->request=$request;$this->action=$action;$this->method=$method;$this->target=$target;}function __toString(){$str="";$str.="";$str.="";break;case 2:$str.="";$str.="";$str.="";break;case 3:$str.="";break;}$str.="";$str.="";$str.="";$str.="

".$this->formName."

";$str.="
target";switch ($this->request["action"]){case 1:$str.="
矩形长度:";$str.="
矩形宽度:";$str.="
三角形边长1:";$str.="
三角形边长2:";$str.="
三角形边长3:";$str.="
圆形半径:";$str.="
";return $str;}}?>
index.php
图形计算器<?php function __autoload($className){include ('class__'.ucfirst($className).'.php');}?>

图形周长和面积计算器


矩形||三角形||圆形
<?php switch ($_REQUEST["action"]){case 1:$form=new Form("矩形",$_REQUEST,"index.php");echo $form;break;case 2:$form=new Form("三角形",$_REQUEST,"index.php");echo $form;break;case 3:$form=new Form("圆形",$_REQUEST,"index.php");echo $form;break;default:echo "请选择一个图形
";}if(isset($_REQUEST["act"])){switch($_REQUEST["act"]){case 1:$shape=new Rect($_REQUEST);break;case 2:$shape=new Triangle($_REQUEST);break;case 3:$shape=new Circle($_REQUEST);break;}echo "面积为:".$shape->area()."
";echo "周长为:".$shape->perimeter()."
";}?>

我这个眼神啊!搞定。犯了超级低级的错误。