㈠ php導出excel 怎麼做
方法一:特點,簡單,省心,
<?php
header("Content-type:application/vnd.ms-excel");
header("Content-Disposition:attachment;filename=test_data.xls");
$tx='表頭';
echo $tx."\n\n";
//輸出內容如下:
echo "姓名"."\t";
echo "年齡"."\t";
echo "學歷"."\t";
echo "\n";
echo "張三"."\t";
echo "25"."\t";
echo "本科"."\t";
?>
方法二: 引用google code中推薦的小類庫(大體同方法一,比較復雜點)
http://code.google.com/p/php-excel/downloads/list
方法三: PHPEXCEL 類庫,功能強大,支持win Excel2003 ,Win Excel2007.
http://www.codeplex.com/PHPExcel
<?
//設置PHPExcel類庫的include path
set_include_path('.'. PATH_SEPARATOR .
'D:\Zeal\PHP_LIBS' . PATH_SEPARATOR .
get_include_path());
/**
* 以下是使用示例,對於以 //// 開頭的行是不同的可選方式,請根據實際需要
* 打開對應行的注釋。
* 如果使用 Excel5 ,輸出的內容應該是GBK編碼。
*/
require_once 'PHPExcel.php';
// uncomment
////require_once 'PHPExcel/Writer/Excel5.php'; // 用於其他低版本xls
// or
////require_once 'PHPExcel/Writer/Excel2007.php'; // 用於 excel-2007 格式
// 創建一個處理對象實例
$objExcel = new PHPExcel();
// 創建文件格式寫入對象實例, uncomment
////$objWriter = new PHPExcel_Writer_Excel5($objExcel); // 用於其他版本格式
// or
////$objWriter = new PHPExcel_Writer_Excel2007($objExcel); // 用於 2007 格式
//$objWriter->setOffice2003Compatibility(true);
//*************************************
//設置文檔基本屬性
$objProps = $objExcel->getProperties();
$objProps->setCreator("Zeal Li");
$objProps->setLastModifiedBy("Zeal Li");
$objProps->setTitle("Office XLS Test Document");
$objProps->setSubject("Office XLS Test Document, Demo");
$objProps->setDescription("Test document, generated by PHPExcel.");
$objProps->setKeywords("office excel PHPExcel");
$objProps->setCategory("Test");
//*************************************
//設置當前的sheet索引,用於後續的內容操作。
//一般只有在使用多個sheet的時候才需要顯示調用。
//預設情況下,PHPExcel會自動創建第一個sheet被設置SheetIndex=0
$objExcel->setActiveSheetIndex(0);
$objActSheet = $objExcel->getActiveSheet();
//設置當前活動sheet的名稱
$objActSheet->setTitle('測試Sheet');
//*************************************
//設置單元格內容
//
//由PHPExcel根據傳入內容自動判斷單元格內容類型
$objActSheet->setCellValue('A1', '字元串內容'); // 字元串內容
$objActSheet->setCellValue('A2', 26); // 數值
$objActSheet->setCellValue('A3', true); // 布爾值
$objActSheet->setCellValue('A4', '=SUM(A2:A2)'); // 公式
//顯式指定內容類型
$objActSheet->setCellValueExplicit('A5', '847475847857487584',
PHPExcel_Cell_DataType::TYPE_STRING);
//合並單元格
$objActSheet->mergeCells('B1:C22');
//分離單元格
$objActSheet->unmergeCells('B1:C22');
//*************************************
//設置單元格樣式
//
//設置寬度
$objActSheet->getColumnDimension('B')->setAutoSize(true);
$objActSheet->getColumnDimension('A')->setWidth(30);
$objStyleA5 = $objActSheet->getStyle('A5');
//設置單元格內容的數字格式。
//
//如果使用了 PHPExcel_Writer_Excel5 來生成內容的話,
//這里需要注意,在 PHPExcel_Style_NumberFormat 類的 const 變數定義的
//各種自定義格式化方式中,其它類型都可以正常使用,但當setFormatCode
//為 FORMAT_NUMBER 的時候,實際出來的效果被沒有把格式設置為"0"。需要
//修改 PHPExcel_Writer_Excel5_Format 類源代碼中的 getXf($style) 方法,
//在 if ($this->_BIFF_version == 0x0500) { (第363行附近)前面增加一
//行代碼:
//if($ifmt === '0') $ifmt = 1;
//
//設置格式為PHPExcel_Style_NumberFormat::FORMAT_NUMBER,避免某些大數字
//被使用科學記數方式顯示,配合下面的 setAutoSize 方法可以讓每一行的內容
//都按原始內容全部顯示出來。
$objStyleA5
->getNumberFormat()
->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_NUMBER);
//設置字體
$objFontA5 = $objStyleA5->getFont();
$objFontA5->setName('Courier New');
$objFontA5->setSize(10);
$objFontA5->setBold(true);
$objFontA5->setUnderline(PHPExcel_Style_Font::UNDERLINE_SINGLE);
$objFontA5->getColor()->setARGB('FF999999');
//設置對齊方式
$objAlignA5 = $objStyleA5->getAlignment();
$objAlignA5->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
$objAlignA5->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
//設置邊框
$objBorderA5 = $objStyleA5->getBorders();
$objBorderA5->getTop()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
$objBorderA5->getTop()->getColor()->setARGB('FFFF0000'); // color
$objBorderA5->getBottom()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
$objBorderA5->getLeft()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
$objBorderA5->getRight()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
//設置填充顏色
$objFillA5 = $objStyleA5->getFill();
$objFillA5->setFillType(PHPExcel_Style_Fill::FILL_SOLID);
$objFillA5->getStartColor()->setARGB('FFEEEEEE');
//從指定的單元格復制樣式信息.
$objActSheet->plicateStyle($objStyleA5, 'B1:C22');
//*************************************
//添加圖片
$objDrawing = new PHPExcel_Worksheet_Drawing();
$objDrawing->setName('ZealImg');
$objDrawing->setDescription('Image inserted by Zeal');
$objDrawing->setPath('./zeali.net.logo.gif');
$objDrawing->setHeight(36);
$objDrawing->setCoordinates('C23');
$objDrawing->setOffsetX(10);
$objDrawing->setRotation(15);
$objDrawing->getShadow()->setVisible(true);
$objDrawing->getShadow()->setDirection(36);
$objDrawing->setWorksheet($objActSheet);
//添加一個新的worksheet
$objExcel->createSheet();
$objExcel->getSheet(1)->setTitle('測試2');
//保護單元格
$objExcel->getSheet(1)->getProtection()->setSheet(true);
$objExcel->getSheet(1)->protectCells('A1:C22', 'PHPExcel');
//*************************************
//輸出內容
//
$outputFileName = "output.xls";
//到文件
////$objWriter->save($outputFileName);
//or
//到瀏覽器
////header("Content-Type: application/force-download");
////header("Content-Type: application/octet-stream");
////header("Content-Type: application/download");
////header('Content-Disposition:inline;filename="'.$outputFileName.'"');
////header("Content-Transfer-Encoding: binary");
////header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
////header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
////header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
////header("Pragma: no-cache");
////$objWriter->save('php://output');
?>
㈡ php 類 對象 實例
&是引用的意思,引用和和c指針差不多,但不能進行數學運算,可以認為引用是一個變數的別名
$assigned = $instance;
//$assigned 是個新變數,然後把$instance的值賦給$assigned
$reference =& $instance;
//$reference是$instance的引用,或者說$reference是$instance的別名,這兩個其實是一個變數,地址都是一樣的
$reference->var6 = '$assigned will have this value';
//因為$reference是$instance的引用(或別名),所以$instance->var6也變了
$instance = null;
//這個也是同理,$reference和$instance是一個變數
//$assigned一直沒有變,因為$assigned和$instance($reference)是兩個變數
㈢ PHP的PHP5
PHP5在長時間的開發及多個預發布版本後,2004年7月13日,PHP5.0發布。該版本以Zend引擎Ⅱ為引擎,並且加入了新功能如PHP Data Objects(PDO)。PHP5.0版本強化更多的功能。首先,完全實現面向對象,提供名為PHP兼容模式的功能。其次是XML功能,PHP5.0版本支持可直觀地訪問XML數據、名為SimpleXML的XML處理用界面。同時還強化了XMLWeb服務支持,而且標准支持SOAP擴展模塊。資料庫方面,PHP新版本提供旨在訪問MySQL的新界面——MySQL。除此前的界面外,還可以使用面向對象界面和預處理語句(Prepared Statement)等MySQL的新功能.另外,PHP5.0上還捆綁有小容量RDBMS-SQLite. *構造函數和析構函數 * 對象的引用 * 對象的克隆 * 對象中的私有、公共及受保護模式 * 介面 (Interfaces)
* 抽象類 * __call * __set 和 __get * 靜態成員
構造函數和析構函數
在 PHP4 中,當函數與對象同名時,這個函數將成為該對象的構造函數,並且在 PHP4 中沒有析構函數的概念。
在 PHP5 中,構造函數被統一命名為 __construct,並且引入了析構函數的概念,被統一命名為 __destruct。
對象的引用
在PHP4中,傳遞變數給一個函數或方法,實際是把這個變數做了一次復制,也就意味著你傳給函數或方法的是這個變數的一個副本,除非你使用了引用符號「&;」 來聲明是要做一個引用,而不是一個 Copy。在 PHP5中,對象總是以引用的形式存在的,對象中的賦值操作同樣也都是一個引用操作。
對象的克隆
當一個對象始終以引用的形式來被調用時,如果我想得到該對象的一個副本,該怎麼辦呢?PHP5 提供了一個新的功能,就是對象的克隆,語法為 __clone。
抽象類
抽象類不能被實例化。
抽象類與其它類一樣,允許定義變數及方法。
抽象類同樣可以定義一個抽象的方法,抽象類的方法不會被執行,不過將有可能會在其派生類中執行。
__call
PHP5 的對象新增了一個專用方法 __call(),這個方法用來監視一個對象中的其它方法。如果你試著調用一個對象中不存在的方法,__call 方法將會被自動調用。
__set 和 __get
這是一個很棒的方法,__set 和 __get 方法可以用來捕獲一個對象中不存在的變數和方法。
類型指示
在 PHP5 中,你可以在對象的方法中指明其參數必須為另一個對象的實例。
靜態成員
靜態成員和靜態方法在面象對象編程的術語中被稱作 「類方法(class methods)」 和 「類變數(class variables)」。
「類方法」 在一個對象沒有實例化前允許被調用。同樣,「類變數」 在一個對象沒有實例化前可以被獨立操作控制(不需要用一個對象的方法來控制)。 異常處理是公認的處理程序錯誤的理想方法,在 Java及 C 中都有這個概念,我們欣喜的看到,在 PHP5 已經加入了這方面的應用。你可以嘗試使用 「try」 和 「catch」 來控製程序的錯誤。當有錯誤發生的時候,代碼會把錯誤交給 「catch」 子句來處理,在 「catch」 子句中,你需要指明要把錯誤交給某個對象處理,這樣做可以使代碼結構看起來更清晰,因為我們可以把所有的錯誤信息交給一個對象來處理。
自定義錯誤處理
你可以很方便的用自定義的處理錯誤的代碼來控制你的程序中的意外。你僅僅需要從異常類中派生出一個自己的錯誤控制類,在你自己的錯誤控制類中,你需要有一個構造函數和一個 getMessage 方法。 名稱空間對類的分組或函數分組很有用。它可以把一些相關的類或函數給組合到一起,方便以後調用。
例:名稱空間 <?phpnamespacemy
ame;//參考定義命名空間小節classMyClass{}functionmyfunction(){}constMYCONST=1;$a=newMyClass;$c=newmy
ameMyClass;//參考全局空間小節$a=strlen('hi');//參考使用命名空間:後備全局函數/常量小節$d=namespaceMYCONST;//參考namespace操作符和__NAMESPACE__常量」小節$d=__NAMESPACE__.'MYCONST';echoconstant($d);//參考命名空間和動態語言特徵小節?>注意你需要在何種情況下使用名稱空間,在實際運用中,你可能會需要聲明兩個或多個名稱一樣的對象來做不同的事情,那麼你就可以把他們分別放到不同的名稱空間中去(但介面是要相同的)。 從PHP5.3開始支持ZendGuard加密方式,必須安裝Zend Guard Loader,老的zend optimizer將不被支持。
Linux安裝Zend Guard Loader支持的過程:
操作系統為CentOS5.5,PHP版本為5.3.8(CentOS5.5中的PHP默認版本較低,如果要升級到PHP最新版,可以使用remi的report源進行升級)。
Windows 下面的 Zend Guard Loader 不支持php5.3.8 VC9 x86 Thread Safe而,php5.3.8 VC9 x86 Non Thread Safe 又不支持 apache。所以安裝的話,就需要安裝在iis或者和nginx搭配。
1、下載最新的Linux操作系統系下的Zend Guard Loader。
2、上傳至Linux伺服器並解壓縮,注意閱讀生成目錄下的README文件。全文如下(添加必要的注釋)。在/etc/php.d/目錄下創建文件zend.ini,內容如下: zend_extension=/usr/lib64/php/moles/ZendGuardLoader.so注意路徑一定要寫上,剛開始沒寫路徑,老是載入不上ZendGuardLoader .so,也可以直接將上面的配置寫入/etc/php.ini文件中,效果一樣。
3、重啟httpd服務:service httpd restart。
4.輸出<?php phpinfo(); ?>
PHP 5.5 正式版發布 不再支持 Windows XP
同時 PHP 開發者也提醒用戶,PHP 5.5 也包含一些不向後兼容的內容,包括:不再支持 Windows XP 和 2003 系統;不區分大小寫的匹配函數、類;常數名稱跟 Locale 無關,這對一些使用非 ASCII 代碼的常量名的開發者需要注意的。
㈣ 高分求PHP面向對象系統!
1.面向對象的概念
2.什麼是類,什麼是對象,類和對象這間的關系
3.什麼是面向對象編程呢?
4.如何抽象出一個類?
5.如何實例化對象?
6.如何去使用對象中的成員?
7.特殊的引用「$this」的使用
8.構造方法與析構方法
9.封裝性
10.__set()、 __get()、 __isset()、 __unset()四個方法的應用
11.類的繼承
12.多態的應用
13.重載新的方法
14.訪問類型
15.靜態成員的使用
16.final關鍵字的應用
17.__toString()方法
18.克隆對象
19.__call處理調用錯誤
20.自動載入類
21.把對象串列化
22.抽象方法和抽象類
23.php5介面技術
1.面向對象的概念
面向對象編程(Object Oriented ProgrammingOOP面向對象程序設計)是一種計算機編程架構,OOP的一條基本原則是計算機程序是由單個能夠起到子程序作用的單元或對象組合而成,OOP達到了軟體工程的三個目標:重用性、靈活性和擴展性。為了實現整體運算,每個對象都能夠接收信息、處理數據和向其它對象發送信息。面向對象一直是軟體開發領域內比較熱門的話題,首先,面向對象符合人類看待事物的一般規律。其次,採用面向對象方法可以使系統各部分各司其職、各盡所能。為編程人員敞開了一扇大門,使其編程的代碼更簡潔、更易於維護,並且具有更強的可重用性。有人說PHP不是一個真正的面向對象的語言,這是事實。PHP 是一個混合型語言,你可以使用OOP,也可以使用傳統的過程化編程。然而,對於大型項目,你可能需要在PHP 中使用純的OOP去聲明類,而且在你的項目里只用對象和類。這個概念我先不多說了,因為有很多朋友遠離面向對象編程的主要原因就是一接觸面向對象概念的時候就理解不上去,所以就不想去學下去了。等讀者看完整體內容後再去把概念搞明白吧。
2.什麼是類,什麼是對象,類和對象這間的關系
類的概念:類是具有相同屬性和服務的一組對象的集合。它為屬於該類的所有對象提供了統一的抽象描述,其內部包括屬性和服務兩個主要部分。在面向對象的編程語言中,類是一個獨立的程序單位,它應該有一個類名並包括屬性說明和服務說明兩個主要部分。
對象的概念:對象是系統中用來描述客觀事物的一個實體,它是構成系統的一個基本單位。一個對象由一組屬性和對這組屬性進行操作的一組服務組成。從更抽象的角度來說,對象是問題域或實現域中某些事物的一個抽象,它反映該事物在系統中需要保存的信息和發揮的作用;它是一組屬性和有權對這些屬性進行操作的一組服務的封裝體。客觀世界是由對象和對象之間的聯系組成的。
類與對象的關系就如模具和鑄件的關系,類的實例化結果就是對象,而對一類對象的抽象就是類。類描述了一組有相同特性(屬性)和相同行為(方法)的對象。
上面大概就是它們的定義吧,也許你是剛接觸面向對象的朋友, 不要被概念的東西搞暈了,給你舉個例子吧,如果你去中關村想買幾台組裝的PC機,到了那裡你第一步要干什麼,是不是裝機的工程師和你坐在一起,按你提供的信息和你一起完成一個裝機的配置單呀,這個配置單就可以想像成是類,它就是一張紙,但是它上面記錄了你要買的PC機的信息,如果用這個配置單買10台機器,那麼這10台機子,都是按這個配置單組成的,所以說這10台機子是一個類型的,也可以說是一類的。那麼什麼是對象呢,類的實例化結果就是對象用這個配置單配置出來(實例化出來)的機子就是對象,是我們可以操作的實體,10台機子,10個對象。每台機子都是獨立的,只能說明他們是同一類的,對其中一個機做任何動作都不會影響其它9台機器,但是我對類修改,也就是在這個配置單上加一個或少一個配件,那麼裝出來的9個機子都改變了,這是類和對象的關系(類的實例化結果就是對象)。
3.什麼是面向對象編程呢?
就不說他的概念,如果你想建立一個電腦教室,首先要有一個房間,房間裡面要有N台電腦,有N張桌子, N把椅子,白板,投影機等等,這些是什麼,剛才咱們說了,這就是對象,能看到的一個個的實體,可以說這個電腦教室的單位就是這一個個的實體對象,它們共同組成了這個電腦教室,那麼我們是做程序,這和面向對象有什麼關系呢?開發一個系統程序和建一個電腦教室類似,你把每個獨立的功能模塊抽象成類,形成對象,由多個對象組成這個系統,這些對象之間都能夠接收信息、處理數據和向其它對象發送信息等等相互作用。就構成了面向對象的程序。
4.如何抽象出一個類?
上面已經介紹過了,面向對象程序的單位就是對象,但對象又是通過類的實例化出來的,所以我們首先要做的就是如何來聲明類,做出來一個類很容易,只要掌握基本的程序語法定義規則就可以做的出來,那麼難點在那裡呢?一個項目要用到多少個類,用多少個對象,在那要定義類,定義一個什麼樣的類,這個類實例化出多少個對象,類裡面有多少個屬性,有多少個方法等等這就需要讀者通過在實際的開發中就實際問題分析設計和總結了。
類的定義:
class 類名{
}
使用一個關鍵字class和後面加上一個你想要的類名以及加上一對大括弧, 這樣一個類的結構就定義出來了,只要在裡面寫代碼就可以了,但是裡面寫什麼? 能寫什麼?怎樣寫才是一個完整的類呢?上面講過來,使用類是為了讓它實例出對象來給我們用,這就要知道你想要的是什麼樣的對象了,像上面我們講的一個裝機配置單上寫什麼,你裝出來的機子就有什麼。比如說,一個人就
是一個對象,你怎麼把一個你看好的人推薦給你們領導呢?當然是越詳細越好了:
首先,你會介紹這個人姓名、性別、年齡、身高、體重、電話、家庭住址等等。
然後,你要介紹這個人能做什麼,可以開車,會說英語,可以使用電腦等等。
只要你介紹多一點,別人對這個人就多一點了解,這就是我們對一個人的描述, 現在我們總結
一下,所有的對象我們用類去描述都是類似的,從上面人的描述可以看到, 做出一個類來,從定義的角度分兩部分,第一是從靜態上描述,第二是從動態上描述,靜態上的描述就是我們所說的
屬性,像上面我們看到的,人的姓名、性別、年齡、身高、體重、電話、家庭住址等等。動態上也就是人的這個對象的功能,比如這個人可以開車,會說英語,可以使用電腦等等,抽象成程序時,我們把動態的寫成函數或者說是方法,函數和方法是一樣的。所以,所有類都是從屬性和方法這兩方面去寫,屬性又叫做這個類的成員屬性,方法叫做這個類的成員方法。
class 人{
成員屬性:姓名、性別、年齡、身高、體重、電話、家庭住址
成員方法:可以開車,
㈤ php類和對象問題
$this 的含義是表示 實例化後的 具體對象!
我們一般是先聲明一個類,然後用這個類去實例化對象!
但是,當我們在聲明這個類的時候,想在類本身內部使用本類的屬性或者方法。應該怎麼表示呢?
例如:
我聲明一個User類!它只含有一個屬性 $name;
class User
{
public $_name;
}
現在,我給User類加個方法。就用getName()方法,輸出$name屬性的值吧! 復制PHP內容到剪貼板
PHP代碼:
class User
{
public $name;
function getName()
{
echo $this->name;
}
}
//如何使用呢?
$user1 = new User();
$user1->name = '張三';
$user1->getName(); //這里就會輸出張三!
$user2 = new User();
$user2->name = '李四';
$user2->getName(); //這里會輸出李四!
怎麼理解呢?
我上面創建了兩個User對象。分別是 $user1 和 $user2 。
當我調用 $user1->getName()的時候。 上面User類中的代碼 echo $this->name ; 就是相當於是 echo $user1->name;
----------------------------------------->>>補充一下>>>
有static修飾的變數和函數不能出現$this
你看到的函數一定沒有static
建議你系統的學習一下PHP,這樣瞎猜是很浪費時間的
static $a1和self::$a1或者$a::$a1是一起使用的。
var $a1和$this->a1是一起使用的
class Abc{
static $a1;
}
class Abc{
var $a1;
}
兩個$a1是不同的。
第一個用self::$a1或者$a::$a1引用,
第二個用$this->$a1或者$a->a1引用
首先static的函數里不能出現$this,只能是self
class Abc{
public static $a1 = "im a1!<br/>";
public static function go()
{
echo(self::$a1);
}
}
Abc::go();
?>