1. php封裝一個用戶類,裡面有登錄注冊方法,這個要怎麼寫
第一步:login.php
//登陸方法
public function login(){
//如果用戶名和密碼為空,則返回登陸頁面
if(empty($_POST['username']) || empty($_POST['password'])){
$data['verifycode'] = rand(1000,9999);//生成一個四位數字的驗證碼
//將驗證碼放入session中,注意:參數是數組的格式
$this->session->set_userdata($data);
//注意:CI框架默認模板引擎解析的模板文件中變數不需要$符號
//$this->parser->parse("admin/login",$data);
//smarty模板變數賦值
$this->tp->assign("verifycode",$data['verifycode']);
//ci框架在模板文件中使用原生態的PHP語法輸出數據
//$this->load->view('login',$data);//登陸頁面,注意:參數2需要以數組的形式出現
//顯示smarty模板引擎設定的模板文件
$this->tp->display("admin/login.php");
}else{
$username = isset($_POST['username'])&&!empty($_POST['username'])?trim($_POST['username']):'';//用戶名
$password = isset($_POST['password'])&&!empty($_POST['password'])?trim($_POST['password']):'';//密碼
$verifycode = isset($_POST['verifycode'])&&!empty($_POST['verifycode'])?trim($_POST['verifycode']):'';//驗證碼
//做驗證碼的校驗
if($verifycode == $this->session->userdata('verifycode')){
//根據用戶名及密碼獲取用戶信息,注意:參數2是加密的密碼
$user_info=$this->user_model->check_user_login($username,md5($password));
if($user_info['user_id'] > 0){
//將用戶id、username、password放入cookie中
//第一種設置cookie的方式:採用php原生態的方法設置的cookie的值
//setcookie("user_id",$user_info['user_id'],86500);
//setcookie("username",$user_info['username'],86500);
//setcookie("password",$user_info['password'],86500);
//echo $_COOKIE['username'];
//第二種設置cookie的方式:通過CI框架的input類庫
$this->input->set_cookie("username",$user_info['username'],3600);
$this->input->set_cookie("password",$user_info['password'],3600);
$this->input->set_cookie("user_id",$user_info['user_id'],3600);
//echo $this->input->cookie("password");//適用於控制器
//echo $this->input->cookie("username");//適用於控制器
//echo $_COOKIE['username'];//在模型類中可以通過這種方式獲取cookie值
//echo $_COOKIE['password'];//在模型類中可以通過這種方式獲取cookie值
//第三種設置cookie的方式:通過CI框架的cookie_helper.php函數庫文件
//這種方式不是很靈驗,建議大家採取第二種方式即可
//set_cookie("username",$user_info['username'],3600);
//echo get_cookie("username");
//session登陸時使用:將用戶名和用戶id存入session中
//$data['username']=$user_info['username'];
//$data['user_id']=$user_info['user_id'];
//$this->session->set_userdata($data);
//跳轉到指定頁面
//注意:site_url()與base_url()的區別,前者帶index.php,後者不帶index.php
header("location:".site_url("index/index"));
}
}else{
//跳轉到登陸頁面
header("location:".site_url("common/login"));
}
}
}
}
第二步:User_model.php
//cookie登陸:檢測用戶是否登陸,如果cookie值失效,則返回false,如果cookie值未失效,則根據cookie中的用戶名和密碼從資料庫中獲取用戶信息,如果能獲取到用戶信息,則返回查詢到的用戶信息,如果沒有查詢到用戶信息,則返回0
public function is_login(){
//獲取cookie中的值
if(empty($_COOKIE['username']) || empty($_COOKIE['password'])){
$user_info = false;
}else{
$user_info=$this->check_user_login($_COOKIE['username'],$_COOKIE['password']);
}
return $user_info;
}
//根據用戶名及加密密碼從資料庫中獲取用戶信息,如果能獲取到,則返回獲取到的用戶信息,否則返回false,注意:密碼為加密密碼
public function check_user_login($username,$password){
//這里大家要注意:$password為md5加密後的密碼
//$this->db->query("select * from ");
//快捷查詢類的使用:能為我們提供快速獲取數據的方法
//此數組為查詢條件
//注意:關聯數組
$arr=array(
'username'=>$username,//用戶名
'password'=>$password,//加密密碼
'status'=>1 //賬戶為開啟狀態
);
//在database.php文件中已經設置了數據表的前綴,所以此時數據表無需帶前綴
$query = $this->db->get_where("users",$arr);
//返回二維數組
//$data=$query->result_array();
//返回一維數組
$user_info=$query->row_array();
if(!empty($user_info)){
return $user_info;
}else{
return false;
}
}
第三步:其它控制器:
public function __construct(){
//調用父類的構造函數
parent::__construct();
$this->load->library('tp'); //smarty模板解析類
$this->load->helper('url'); //url函數庫文件
$this->load->model("user_model");//User_model模型類實例化對象
$this->cur_user=$this->user_model->is_login();
if($this->cur_user === false){
header("location:".site_url("common/login"));
}else{
//如果已經登陸,則重新設置cookie的有效期
$this->input->set_cookie("username",$this->cur_user['username'],3600);
$this->input->set_cookie("password",$this->cur_user['password'],3600);
$this->input->set_cookie("user_id",$this->cur_user['user_id'],3600);
}
$this->load->library('pagination');//分頁類庫
$this->load->model("role_model");//member_model模型類
$this->load->model("operation_model");//引用operation_model模型
$this->load->model("object_model");//引用object_model模型
$this->load->model("permission_model");//引用permission_model模型
}
2. 什麼是php中的封裝
封裝是php面向對象的其中一個特性,將多個可重復使用的函數封裝到一個類裡面。在使用時直接實例化該類的某一個方法,獲得需要的數據
如果是私有的方法和屬性值,外部無法訪問,具有一定的保護作用。
面向對象之封裝 例子
class A{
public $name = '老王';
// protected $name = '老王';
//private $name = '老王';
//自己訪問
public function saya(){
return $this->name;
}
}
//實例化對象
$b = new A;
//public:外部、家族、自己都可以訪問
//protected:家族和自己都可以訪問,外部無法訪問
//private:自己可以訪問,外部和家族都無法訪問
echo '外部訪問:'.$b->name.'<br>'; //如果是私有的,訪問不了
echo '家族訪問:'.$b->sayb().'<br>';
echo '自己訪問:'.$b->saya().'<br>';
3. ThinkPHP裡面怎麼使用自己封裝的類
TP:是一個PHP開源框架,你可以理解成一個工具箱把。裡面很多類啊,業務邏輯啊都是封裝好的,有自己的使用規則。如果你PHP不是很精通,我建議你還是先去做原生態的PHP,然後再用框架比較好。嘿嘿。
CMS:是一個內容管理系統,它不是一個特定的東西,很多公司都有CMS。
總結:TP是工具,CMS是產品。這樣能理解嗎?
分析:我估計你的意思可能是想找一個目前公司使用比較廣泛的東西,給自己定目標是嗎?怎麼說呢。還是那句話,你的PHP不精通,這兩個弄起來很困難,而且很費時間。不劃算,知識這個東西不能空中樓閣,要一點一點的來,慢不怕,關鍵是每一天都有進步。這里我給你一點建議把。
建議:
1.PHP基礎,函數的使用,自定義函數,變數的作用域,「&」的作用等等,都 是基礎的東西。
2.OOP,傳說中的面向對象,這個怎麼說呢,說復雜也復雜,說簡單也簡單,我的方法是你把生活中的東西抽象出來就學的很快。它包括的內容比較寬泛,需要上面第一條的基礎,只要你第一條越扎實,你學OOP就回越快。OOP這個東西是個思想。建議:你開始的時候只要能看懂,能明白別人代碼里OOP的意思就OK了,然後自己寫一寫。這里還包括有些東西,繼承啊,封裝啊,多態啊。你先了解著三者的用途,然後是抽象類啊,抽象方法啊,他們的規則啊,比如抽象類不需要實現,但其中必須要包含一個抽象方法啊。介面啊,介面是允許繼承多個介面的,然後了解一下介面和抽象類的區別。然後再去研究一下PHP OOP裡面的一些固定的語法或者說是規則。然後就OK拉,西西。
3.了解設計模式,自己寫點東西,對這玩意有所了解,別學完了都忘了。。
4.然後你就可以去看TP或者CMS只類的東西了,對於CMS我建議,你還是先會用,然後再去研究它的構造。西西。
4. PHP如何封裝方法
//下面定義一個方法,這個方法很簡單,就是處理2個數的相加問題
functionadd($number1,$number2){
$sum=$number1+$number2;
echo$sum;
}
//我們來調用add()方法
add(1,2);
/**
說明:
function這個關鍵字就是聲明方法的。在這個關鍵字後面的add就是方法的名稱,括弧中的是參數。
也可以沒有參數的。大括弧內是方法體。裡面是該方法的邏輯。
下面的add(1,2)就是調用add這個方法。如果沒有調用方法將不會被執行的。
*/
//定義一個帶有返回值的方法
functionre($n1,$n2){
$sum=$n1+$n2;
return$sum;
}
//調用有返回值的方法,調用這個方法,值是5。
echore(2,3);
5. PHP訪問MYSQL資料庫封裝類(附函數說明)
復制代碼
代碼如下:
<?php
/*
MYSQL
資料庫訪問封裝類
MYSQL
數據訪問方式,php4支持以mysql_開頭的過程訪問方式,php5開始支持以mysqli_開頭的過程和mysqli面向對象
訪問方式,本封裝類以mysql_封裝
數據訪問的一般流程:
1,連接資料庫
mysql_connect
or
mysql_pconnect
2,選擇資料庫
mysql_select_db
3,執行SQL查詢
mysql_query
4,處理返回的數據
mysql_fetch_array
mysql_num_rows
mysql_fetch_assoc
mysql_fetch_row
etc
*/
class
db_mysql
{
var
$querynum
=
0
;
//當前頁面進程查詢資料庫的次數
var
$dblink
;
//資料庫連接資源
//鏈接資料庫
function
connect($dbhost,$dbuser,$dbpw,$dbname='',$dbcharset='utf-8',$pconnect=0
,
$halt=true)
{
$func
=
empty($pconnect)
?
'mysql_connect'
:
'mysql_pconnect'
;
$this->dblink
=
@$func($dbhost,$dbuser,$dbpw)
;
if
($halt
&&
!$this->dblink)
{
$this->halt("無法鏈接資料庫!");
}
//設置查詢字元集
mysql_query("SET
character_set_connection={$dbcharset},character_set_results={$dbcharset},character_set_client=binary",$this->dblink)
;
//選擇資料庫
$dbname
&&
@mysql_select_db($dbname,$this->dblink)
;
}
//選擇資料庫
function
select_db($dbname)
{
return
mysql_select_db($dbname,$this->dblink);
}
//執行SQL查詢
function
query($sql)
{
$this->querynum++
;
return
mysql_query($sql,$this->dblink)
;
}
//返回最近一次與連接句柄關聯的INSERT,UPDATE
或DELETE
查詢所影響的記錄行數
function
affected_rows()
{
return
mysql_affected_rows($this->dblink)
;
}
//取得結果集中行的數目,只對select查詢的結果集有效
function
num_rows($result)
{
return
mysql_num_rows($result)
;
}
//獲得單格的查詢結果
function
result($result,$row=0)
{
return
mysql_result($result,$row)
;
}
//取得上一步
INSERT
操作產生的
ID,只對表有AUTO_INCREMENT
ID的操作有效
function
insert_id()
{
return
($id
=
mysql_insert_id($this->dblink))
>=
0
?
$id
:
$this->result($this->query("SELECT
last_insert_id()"),
0);
}
//從結果集提取當前行,以數字為key表示的關聯數組形式返回
function
fetch_row($result)
{
return
mysql_fetch_row($result)
;
}
//從結果集提取當前行,以欄位名為key表示的關聯數組形式返回
function
fetch_assoc($result)
{
return
mysql_fetch_assoc($result);
}
//從結果集提取當前行,以欄位名和數字為key表示的關聯數組形式返回
function
fetch_array($result)
{
return
mysql_fetch_array($result);
}
//關閉鏈接
function
close()
{
return
mysql_close($this->dblink)
;
}
//輸出簡單的錯誤html提示信息並終止程序
function
halt($msg)
{
$message
=
"<html>\n<head>\n"
;
$message
.=
"<meta
content='text/html;charset=gb2312'>\n"
;
$message
.=
"</head>\n"
;
$message
.=
"<body>\n"
;
$message
.=
"資料庫出錯:".htmlspecialchars($msg)."\n"
;
$message
.=
"</body>\n"
;
$message
.=
"</html>"
;
echo
$message
;
exit
;
}
}
?>
6. php實現mysql封裝類示例
php封裝mysql類
復制代碼
代碼如下:
<?php
class
Mysql
{
private
$host;
private
$user;
private
$pwd;
private
$dbName;
private
$charset;
private
$conn
=
null;
public
function
__construct()
{
$this->host
=
'localhost';
$this->user
=
'root';
$this->pwd
=
'root';
$this->dbName
=
'test';
$this->connect($this->host,$this->user,$this->pwd);
$this->switchDb($this->dbName);
$this->setChar($this->charset);
}
//負責鏈接
private
function
connect($h,$u,$p)
{
$conn
=
mysql_connect($h,$u,$p);
$this->conn
=
$conn;
}
//負責切換資料庫
public
function
switchDb($db)
{
$sql
=
'use'
.
$db;
$this->query($sql);
}
//負責設置字元集
public
function
setChar($char)
{
$sql
=
'set
names'
.
$char;
$this->query($sql);
}
//負責發送sql查詢
public
function
query($sql)
{
return
mysql_query($sql,$this->conn);
}
//負責獲取多行多列的select結果
public
function
getAll($sql)
{
$list
=
array();
$rs
=
$this->query($sql);
if
(!$rs)
{
return
false;
}
while
($row
=
mysql_fetch_assoc($rs))
{
$list[]
=
$row;
}
return
$list;
}
public
function
getRow($sql)
{
$rs
=
$this->query($sql);
if(!$rs)
{
return
false;
}
return
mysql_fetch_assoc($rs);
}
public
function
getOne($sql)
{
$rs
=
$this->query($sql);
if
(!$rs)
{
return
false;
}
return
mysql_fetch_assoc($rs);
return
$row[0];
}
public
function
close()
{
mysql_close($this->conn);
}
}
echo
'<pre>';
$mysql
=
new
Mysql();
print_r($mysql);
$sql
=
"insert
into
stu
values
(4,'wangwu','99998')";
if($mysql->query($sql)){
echo
"query成功";
}else
{
echo
"失敗";
}
echo
"<br
/>";
$sql
=
"select
*
from
stu";
$arr
=
$mysql->getAll($sql);
print_r($arr);
?>
7. html和php混編代碼如何封裝成類,代碼如下
class Menu{
public function getMenu(){
echo '<select name="Proct_Id" id="Proct_Id">';
$sql_pro="select id,proct,lotid from proct";
$res_pro=mysql_query($sql_pro);
while($rs1_pro=mysql_fetch_array($res_pro)){
echo "<option value='{$rs1_pro["id"]}' ";
if ($rs_pro["id"]==$rs1_pro["id"]){
echo "selected";
}
echo '>';
echo "{$rs1_pro["proct"]}-{$rs1_pro["lotid"]}";
echo "</option>";
}
echo " </select>";
}
}
你自己測試一下哦,希望我的回答能幫到你
8. PHP中,類的封裝,調用問題
<?
class Page{
function 分頁函數(參數){
$perNumber = 2;
$page = $_GET['page'];
$count = mysql_query("select count(*) from people");
$rs = mysql_fetch_array($count);
$totalNumber = $rs[0];
$totalPage = ceil($totalNumber/$perNumber);
if(!isset($page)){
$page = 1;
}
$startCount = ($page-1)*$perNumber;
$result = mysql_query("select * from people limit $startCount,$perNumber");
$num = mysql_numrows($result);
for($i=0;$i<$num;$i++){
$a = mysql_result($result,$i,"id");
$b = mysql_result($result,$i,"name");
$c = mysql_result($result,$i,"age");
echo "<br />".$a."<br />".$b."<br />".$c."<br />";
}
}
}
?>
9. 現在PHP編程的時候一般是把一個功能的實現封裝成一個類還是封裝成一個方法
單一功能的實現封裝成方法比較方便,比如處理時間(現在回復貼子的時間與上次回復的時間間隔這個功能封裝成一個方法便可以方便在每個需要的地方調用)。封裝成類多數用於模塊這種實現多功能的地方。如處理資料庫:可以把與資料庫有關的功能封裝成類,在這個類中實現資料庫的連接、查詢,添加,刪除、修改資料庫等方法。還有處理圖像,模板處理等等這些模塊都可以封裝成類有助於代碼的可維護性,增強代碼的重用性等好處就不多說了
10. php計算長方性面積的封裝類
把成員方法和成員屬性封裝到類中,隱藏屬性和方法實現的細節,通過public、protected、private等限定類成員的訪問許可權,數據被保護在內部,只通過被授權的成員方法才可以操作,盡可能的對成員進行封裝。
public:方法或者屬性在任何作用域下都可以訪問到,而且是默認的,如果沒有為一個屬性或方法指定訪問修飾符,它將是public。
protected:本類和子類可以訪問,外部對象不可以調用。
private:只能在本類訪問,子類與外部對象都不可能調用。經過private標記的方法或者屬性可以在繼承類中重新定義,每一個類只能看到它自己定義的私有方法。
這三個修飾符從作用范圍上來講應該像這樣從大到小排序:public→protected→private之所以說是在作用范圍上,是因為類把一些屬性和方法進行了封裝,這個封裝就決定了數據的「可見性」,這樣我們在類的外面不能夠隨意修改所定義的屬性和方法而只能夠進行調用,這就是封裝的好處,同時也提高了安全性。