用PHP類比C的資料結構

來源:互聯網
上載者:User

 

C中對與一個固定的資料結構儲存很方便。
struct USERINFO
{
int ID;
char USERNAME[10];
char PASSWORD[15];
char MAIL[10];
}typedef USERINFO;
USERINFO UserInfo;
ZeroMemory(&UserInfo,sizeof(UserInfo));
UserInfo.ID = 1;
strcat(UserInfo.USERNAME,"wan_dou");
strcat(UserInfo.PASSWORD,"password");
strcat(UserInfo.MAIL,"wan_dou@citiz.net");
FILE *fp = fopen("c:/x.txt","w");
fwrite(&UserInfo,sizeof(UserInfo),1,fp);
fclose(fp);
就將儲存一個使用者的資訊。如果一個變數或數組的輸入低於給他的輸入就自動補空,所以取出更方便
fread(&UserInfo,sizeof(UserInfo),1,fp);
但PHP中好象沒有STRUCT的支援,而CLASS用相同的操作的話一定是錯誤的。
所以只有自己來類比一個結構了。
下面就是一個不太成熟的結構了,最討厭的就是不能支援變動長度的資料。

<?
define("UserInfoPath","data/UserInfo");

class USERINFO
{
var $UserInfoStruct = Array
(
"UserName" => 10 ,//定義結構
"PassWord" => 15 ,//如果是 int ,float,double 可以參考資料庫中的定義或自行設定
"Mail" => 50 ,//50:字元需要的長度,MAIL是結構名稱
);
var $UserName;//真正存放內容的變數在這裡。
var $PassWord;//
var $Mail;//,必須和結構定義的描述相同。

function checkValue($str,$n)//給定一個變數,和規定變數長度變數
{
while(strlen($str)<$n)//少補
{
$str.=' ';
}
if( strlen($str) > $n)//多退
$str = substr($str,0,$n);

}
function SaveToFile($filename)//儲存為一個檔案
{
$fp = fopen($filename,"w");//開啟
for(reset($this->UserInfoStruct);$i=key($this->UserInfoStruct);next($this->UserInfoStruct))
{
$this->checkValue(&$this->$i,$this->UserInfoStruct[$i]);//調用函數,被檢查變數提供指標地址
echo $this->$i;//我自己放的調試,可刪除。
fputs($fp,$this->$i,$this->UserInfoStruct[$i]);//寫入 $this->$i是一個指相變數的變數,如 $this->UserName,第三個參數可省,但如果加更可靠的儲存指定長度的變數。;

}
fclose($fp);//關閉
}
function LoadFromFile($filename)//從一個檔案中讀取
{
$fp = fopen($filename,"r");//開啟
for(reset($this->UserInfoStruct);$i=key($this->UserInfoStruct);next($this->UserInfoStruct))
{
$this->$i = fgets($fp,$this->UserInfoStruct[$i]);//讀出指定長度的字元到變數
echo $this->$i;//自己調試
}
fclose($fp);//關閉
}

};
/*
$UserInfo = new USERINFO;//寫
$UserInfo -> UserName ="wan_dou";
$UserInfo -> PassWord ="1981627";
$UserInfo -> Mail ="wan_dou@sina.com.cn";
$UserInfo -> SaveToFile("c:/1.txt");

$UserInfoLoad = new USERINFO;//讀
$UserInfoLoad->LoadFromFile("c:/1.txt");
echo $UserInfoLoad->UserName;
*/
?>



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.