ホームページ > バックエンド開発 > PHPチュートリアル > 本に従ってグラフの面積を計算するプログラムを書いたのですが、どこで間違ったのか聞いてもいいですか?

本に従ってグラフの面積を計算するプログラムを書いたのですが、どこで間違ったのか聞いてもいいですか?

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
リリース: 2016-06-23 14:03:53
オリジナル
1126 人が閲覧しました

「PHPを考える」第8章の最後の例。フォームは作成できますが、「計算」をクリックするとエラーが発生します。アドバイスをお願いします
インターフェース: class__Shape.php
インターフェース Shape{
function area(); }
?>
Rectangle: class__Rect.php
クラス Rect の実装 Shape{
private $width;

function __construct($size=""){
$this-> =$size["長さ"];
}
関数 area(){
return $this->length * $this->width;
}
function perimeter(){
return 2 * ($this-> ;width + $this->length);
}
}
Triangle: class__Triangle.php
クラス Triangle 実装 Shape{
private $length2; ;

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

function __construce($size=""){
$this->radius = $size["radius"]
}
function area(){
return pi(); radius * $this->radius;
}
function perimeter(){
return 2* pi() * $this->radius;
}
}
フォーム: class__Form.php
< ;? php
クラス フォーム{
プライベート $リクエスト;
プライベート $メソッド;
関数 __construct($formName,$request,$action=", $method="get",$target="_self"){
$this->formName=$formName;
$this->action=$action; this->method=$method;
$this->target=$target;
関数 __toString(){
$str="

"; str.=""; $str.=" $str.="< ;";
ブレーク;
ケース 2:
$str.="
";
$str.=" th>三角形の辺の長さ 2:

";
$str.="";
休憩;
ケース 3:
$str.="";
休憩;
}
$str.="";
$str.="";
$str.="";
$str.="

".$this->formName."

"; $str.="
target";

switch ($this->request["action"]){
case 1:
$str .="
長方形の長さ:"; $str.="
長方形の幅:
三角形の辺の長さ 1: ";
$str.="< 入力タイプ=text name='length1' value=".$this->request["length1"].">
";
$str.="
三角形边长3:";
$str.="
圆形半径:";
$str.="
";

$str; を返す
}
}
?>
制御程序:index.php


図形計算器


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

図形周長および面积コンパイラー



四角形||
三角形||
圆形


switch ($_REQUEST["action"]){
case 1:
$form=new Form("四角形",$_REQUEST,"index.php");
echo $form;
休憩;
ケース 2:
$form=new Form("三角形",$_REQUEST,"index.php");
echo $form;
休憩;
ケース3:
$form=new Form("圆形",$_REQUEST,"index.php");
echo $form;
休憩;
デフォルト:
echo "请选择一个図形
";
}

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



回复讨论(解决方案)

没人看?都还没睡眠吗?

class__Form.php 中

$str.="

ターゲット";

$str.="target";
少抄了空格

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

$str.="<form action=".$this->action."method=".$this->method."target=$this->target";
ログイン後にコピー


この文には問題があります。アクションはindex.php、メソッドはパラメータですが、インデックスに直接接続されています。 。 。
index.phpmethod=
これに変更します:
index.php?method=
function __construct($formName,$request,$action="index.php",$method="get",$target="_self") {
$this->formName=$formName;
$this->request=$action.'?';
$this->method=$method; $this->target=$target;
}

さらに、パラメータが渡されていないため、サークルに問題があるようです。
純粋に肉眼で見て、勝手に推測して、ご質問があればお知らせください~

実際に誰かが最初に回答しましたが、私はまだ見ていません。 。 。恥ずかしい

class__Form.php 内

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

$str.="ta...

私修正後、円と三角形は出力できるのですが、「四角形」は出力できないのですか?テストしたところ、「rectangle」に問題はありませんでした。問題は、
フォームは正常に作成できましたが、「計算」をクリックしても何も起こりませんでした。また、
$str.="";
$str.="";
これら 2 つは何に使用されますか?

Windows でテストしていない場合は、ファイル名の大文字と小文字に注意する必要があります

class__Rect.php は使用できませんclass__rect.php またはその他の

action はフォーム読み込みの制御に使用されます
act はクラス読み込みの制御に使用されます


Windows でテストしていない場合は、ファイル名の大文字と小文字に注意する必要があります

class__Rect.php class__rect.php などは使用できません

アクションはフォームの読み込みを制御するために使用されます
act はクラスの読み込みを制御するために使用されます
Windows なので、大文字と小文字が区別されます
問題はありません。私のテストでは、何が問題なのかをどうやって教えてもらえますか? class__rect.php などは使用できません

action はフォームの読み込みを制御するために使用されます

act はクラスの読み込みを制御するために使用されます

Windows なので、大文字と小文字も区別されます あなたのコンピュータでテストしても大丈夫ですか?
四角形を含むコードを実行することもできます

もう一度書いたのですが、今度はまた三角形が出力されませんでした。混乱しています、何が問題ですか?
class__form.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=$アクション;
$this->method =$method;
$this->target=$target;
関数 __toString(){
$str="

< ;/tr>";
ブレーク;
ケース 2:
$str.="< th>三角形の 3 番目の辺の長さ: < ;td>";
$str.="";
$str.="";
ケース 3:
$str.=" ブレーク;
}
$str.="< /tr>";
$str.="";
$str.="< ;input type=hidden name='action' value=".$this->request["action"].">"; str.="

計算 ".$this->formName."

";
$str.=""

switch($this->request["action"]) {
ケース 1:
$str.="
長方形の長さ: ";
$str.="";
$str.="
長方形の幅: < /th>";
$str.="";
$str .="
三角形の最初の辺の長さ: ";
$str.= "";
$str.= "
三角形の 2 番目の辺の長さ: "; $str.="<入力タイプ=text name='length2' value=".$this-> ;request["length2"].">";
$str.="
円の半径: ";
$str .=" ";
$str.="
";

return $str; }
}

function __autoload($className){ //クラスがインクルードされると、このページに自動的にロードされます
include ("class__".ucfirst($className).".php" );//対応するクラスが存在するファイルを自動的にロードします
}
? >
長方形|| 三角形< /a>||
圆形


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="<table align=center border=5 width=800>";$str.="<caption><h2>".$this->formName."</h2><caption>";$str.="<form action='$this->action' method='$this->method' target=$this->target";switch ($this->request["action"]){case 1:$str.="<tr><th>矩形长度:</th><td>";$str.="<input type='text' name='length' value=".$this->request["length"]."></td></tr>";$str.="<tr><th>矩形宽度:</th><td>";$str.="<input type='text' name='width' value=".$this->request["width"]."></td></tr>";break;case 2:$str.="<tr><th>三角形边长1:</th><td>";$str.="<input type=text name='length1' value=".$this->request["length1"]."></td></tr>";$str.="<tr><th>三角形边长2:</th><td>";$str.="<input type=text name='length2' value=".$this->request["length2"]."></td></tr>";$str.="<tr><th>三角形边长3:</th><td>";$str.="<input type=text name='length3' value=".$this->request["length3"]."></td></tr>";break;case 3:$str.="<tr><th>圆形半径:</th><td>";$str.="<input type=text name='radius' value=".$this->request["radius"]."></td></tr>";break;}$str.="<tr><td align=center colspan=2><input type=submit value='计算'></td></tr>";$str.="<input type=hidden name='act' value=".$this->request["action"].">";$str.="<input type=hidden name='action' value=".$this->request["action"].">";$str.="</form></table>";return $str;}}?>
ログイン後にコピー
index.php
<html><head><title>图形计算器</title></head><body><?php function __autoload($className){include ('class__'.ucfirst($className).'.php');}?><center><h2>图形周长和面积计算器</h2><hr><a href="index.php?action=1">矩形</a>||<a href="index.php?action=2">三角形</a>||<a href="index.php?action=3">圆形</a><br /></center><?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 "请选择一个图形<br />";}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()."<br>";echo "周长为:".$shape->perimeter()."<br>";}?></body></html>
ログイン後にコピー

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート