討論區快速選單
知識庫快速選單
軟體開發過程中有哪些資安漏洞? 網路投保旅行平安險 網路投保旅行平安險
[ 回上頁 ] [ 討論區發言規則 ]
令人吐血的PHP class
更改我的閱讀文章字型大小
作者 : victorlin(VICTOR) 貼文超過200則人氣指數超過10000點
[ 貼文 205 | 人氣 16178 | 評價 340 | 評價/貼文 1.66 | 送出評價 27 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/2/6 上午 01:29:32
我今天一整天都花在寫我家網頁的程式上
用的是PHP....為了管理上方便 我用了class
就是罪惡的開始....也是麻煩的開始
不管我怎樣寫 都有莫明奇妙的錯誤....錯得莫明奇妙

像我指定一個變數 結果它的另一個變數也跟著變....
於是我就寫了一個小程式來測試....

<?php
//phpinfo();

$Test = new CTest();
$Test->A();
$Test->test();
 
class CTest{
var $A;
var $B;
function CTest(){
$this->$A = NULL;
$this->$A = NULL;
}
function A(){
$this->$A = "This is A";
}
function B(){
$this->$B = "This is B";
}
function test(){
$TempA = $this->$A;
$TempB = $this->$B;
echo("test A:$TempA<br>\n");
echo("test B:$TempB<br>\n");
}
}

?>

明明就只有指定A 卻連B也跟著變成了A
後來我查了一下版本
是PHP Version 4.3.10
是否是因為版本太舊 還是這個版本本來就有Bug....
我快被這天殺的問題氣到吐血
最後做出決定 放棄使用Class
否則這輩子程式都不可能完成
看來用這種Class根本就是在當白老鼠= ="
作者 : jawa560(Snaking) Java Script優秀好手貼文超過1000則人氣指數超過30000點
[ 貼文 1154 | 人氣 32593 | 評價 4630 | 評價/貼文 4.01 | 送出評價 168 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人victorlin註記此篇回應為最佳解答 2005/2/6 上午 03:15:06
一個變數只能有一個$字號, 所以 $this->$A 是錯的,$this->A 才是正確的!
下面這樣就能得到正確結果:

<?php
//phpinfo();

$Test = new CTest();
$Test->A();
$Test->test();
$Test->B();
$Test->test();
 
class CTest{
var $A;
var $B;
function CTest(){
$this->A = NULL;
$this->B = NULL;
}
function A(){
$this->A = "This is A";
}
function B(){
$this->B = "This is B";
}
function test(){
$TempA = $this->A;
$TempB = $this->B;
echo("test A:$TempA<br>\n");
echo("test B:$TempB<br>\n");
}
}

?>

這麼基本的問題,我自己也才剛搞清楚! 好加有認真看到這個問題!
作者 : victorlin(VICTOR) 貼文超過200則人氣指數超過10000點
[ 貼文 205 | 人氣 16178 | 評價 340 | 評價/貼文 1.66 | 送出評價 27 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/2/6 下午 12:42:56
喔....抱歉
沒想到是那麼白痴的問題
因為我對PHP不熟 應該說是沒寫過
一些細節上會弄錯

可是....我不明白 為何
$this->$A = 'This is A'這個指令會連帶的把B也給設定了?
作者 : jawa560(Snaking) Java Script優秀好手貼文超過1000則人氣指數超過30000點
[ 貼文 1154 | 人氣 32593 | 評價 4630 | 評價/貼文 4.01 | 送出評價 168 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/2/7 上午 02:23:04
既然不是正確用法,就不必想那麼多了!
我猜可能是php的解析器 把所有不正確的變數定義 通通指到同一個記憶體位址去!
作者 : superit(JS IT)
[ 貼文 7 | 人氣 1 | 評價 30 | 評價/貼文 4.29 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/10/4 上午 11:24:27
請在
$TempA = $this->$A;
$TempB = $this->$B;
echo $this; -->加這個echo $this就知道why
echo("test A:$TempA<br>\n");
echo("test B:$TempB<br>\n");
因為從頭到尾值都是指定給$this
所以 $TempA = $this
     $TempB = $this
作者 : sjtprruy(sjtprruy)
[ 貼文 2 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2008/3/24 上午 12:30:47
楼上的写的$this是对象,不能用echo,而用print_r()或者var_dump打印数组或对象
 板主 : 酷爸爸
 > PHP - 討論區
 - 最近熱門問答精華集
 - 全部歷史問答精華集
 - PHP - 知識庫
  ■ 全站最新Post列表
  ■ 我的文章收藏
  ■ 我最愛的作者
  ■ 全站文章收藏排行榜
  ■ 全站最愛作者排行榜
  ■  月熱門主題
  ■  季熱門主題
  ■  熱門主題Top 20
  ■  本區Post排行榜
  ■  本區評價排行榜
  ■  全站專家名人榜
  ■  全站Post排行榜
  ■  全站評價排行榜
  ■  全站人氣排行榜
 請輸入關鍵字 
  開始搜尋
 
Top 10
評價排行
PHP
1 Fillano 1400 
2 dreamer...... 1170 
3 阿文 940 
4 路人乙 840 
5 pangpang 620 
6 kiang 580 
7 Snaking 470 
8 Aery 460 
9 kagaya 370 
10 mygod 370 
PHP
  專家等級 評價  
  一代宗師 10000  
  曠世奇才 5000  
  頂尖高手 3000  
  卓越專家 1500  
  優秀好手 750  
Microsoft Internet Explorer 6.0. Screen 1024x768 pixel. High Color (16 bit).
2000-2019 程式設計俱樂部 http://www.programmer-club.com.tw/
0.0625