本文目录一览:
- PHP中,类的封装,调用问题
- vs2010怎么把php代码封装成安装程序
- 什么是php中的封装
- [PHP 继承、封装、多态](#PHP 继承、封装、多态)
- 求PHP数据库封装类操作代码
- PHP函数封装!
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 />";
}
}
}
vs2010怎么把php代码封装成安装程序
- VS2010新建一个安装包制作项目。(取名为“素材包”)
- 素材包上右击 → Add → Assembly,选定自己要安装的可执行文件。然后相关程序集都会被自动加载进去,以后就是要将没有加载的程序补充进去。
- 添加需要添加的文件,在 File System 中的 App Folder 中添加文件。
- 卸载:在系统中加载 msiexec.exe,然后创建快捷方式,在 Arguments 中填上
/x{produce NO}
(其中/x
只是 msiexec.exe 的一个卸载参数)。 - 自定义函数:这个函数中能实现很多功能,比如和目标计算机互动等。在 Solution 中 Add 一个
inno.cs
(安装工程),其实就是一个继承自安装程序的类。将此函数设定为主输出以后,自定义可以参考。 - 一个比较恼火的问题就是自动加载路径了,这中间有详细的介绍。
什么是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>';
PHP 继承、封装、多态
- 子类只能继承父类的非私有属性。
- 子类继承父类后,相当于将父类的属性和方法 copy 到子类,可以直接使用
$this
调用该属性。 - PHP 只能单继承,不支持一个类继承多个类。但是一个类可以进行多层继承。
类实现封装是为了不让外面的类随意修改一个类的成员变量,所以在定义一个类的成员的时候,我们使用
private
关键字设置这个成员的访问权限只能被这个类的其他成员方法调用,而不能被其他类中的方法调用,即通过本类中提供的方法来访问本类中的私有属性。 - 所以在该类中我们会提供一个访问私有属性的方法。
- 然后我们一般会定义两个方法来实现对一个变量的操作,即
__get()
和__set()
方法。 一个类被多个子类继承,如果这个类的某个方法,在多个子类中表现出不同的功能,我们称这种行为为多态(同一个类的不同子类表现出不同的形态)。 - 子类继承父类
- 子类重写父类的方法
- 父类引用指向子类对象
求PHP数据库封装类操作代码
<?php
class MySQL {
private $host; // 服务器地址
private $name; // 登录账号
private $pwd; // 登录密码
private $dBase; // 数据库名称
private $conn; // 数据库链接资源
private $result; // 结果集
private $msg; // 返回结果
private $fields; // 返回字段
private $fieldsNum; // 返回字段数
private $rowsNum; // 返回结果数
private $rowsRst; // 返回单条记录的字段数组
private $filesArray = array(); // 返回字段数组
private $rowsArray = array(); // 返回结果数组
private $charset = 'utf8'; // 设置操作的字符集
private $query_count = 0; // 查询结果次数
static private $_instance; // 存储对象
// 初始化类
private function __construct($host = '', $name = '', $pwd = '', $dBase = '') {
if ($host != '') $this->host = $host;
if ($name != '') $this->name = $name;
if ($pwd != '') $this->pwd = $pwd;
if ($dBase != '') $this->dBase = $dBase;
$this->init_conn();
}
// 防止被克隆
private function __clone() {}
public static function getInstance($host = '', $name = '', $pwd = '', $dBase = '') {
if (FALSE == (self::$_instance instanceof self)) {
self::$_instance = new self($host, $name, $pwd, $dBase);
}
return self::$_instance;
}
public function __set($name, $value) {
$this->$name = $value;
}
public function __get($name) {
return $this->$name;
}
// 链接数据库
function init_conn() {
$this->conn = @mysql_connect($this->host, $this->name, $this->pwd) or die('connect db fail !');
@mysql_select_db($this->dBase, $this->conn) or die('select db fail !');
mysql_query("set names " . $this->charset);
}
// 查询结果
function mysql_query_rst($sql) {
if ($this->conn == '') $this->init_conn();
$this->result = @mysql_query($sql, $this->conn);
$this->query_count++;
}
// 取得字段数
function getFieldsNum($sql) {
$this->mysql_query_rst($sql);
$this->fieldsNum = @mysql_num_fields($this->result);
}
// 取得查询结果数
function getRowsNum($sql) {
$this->mysql_query_rst($sql);
if (mysql_errno() == 0) {
return @mysql_num_rows($this->result);
} else {
return '';
}
}
// 取得记录数组(单条记录)
function getRowsRst($sql, $type = MYSQL_BOTH) {
$this->mysql_query_rst($sql);
if (empty($this->result)) return '';
if (mysql_error() == 0) {
$this->rowsRst = mysql_fetch_array($this->result, $type);
return $this->rowsRst;
} else {
return '';
}
}
// 取得记录数组(多条记录)
function getRowsArray($sql, $type = MYSQL_BOTH) {
!empty($this->rowsArray) ? $this->rowsArray = array() : '';
$this->mysql_query_rst($sql);
if (mysql_errno() == 0) {
while ($row = mysql_fetch_array($this->result, $type)) {
$this->rowsArray[] = $row;
}
return $this->rowsArray;
} else {
return '';
}
}
// 更新、删除、添加记录数
function uidRst($sql) {
if ($this->conn == '') {
$this->init_conn();
}
@mysql_query($sql);
$this->rowsNum = @mysql_affected_rows();
if (mysql_errno() == 0) {
return $this->rowsNum;
} else {
return '';
}
}
// 返回最近插入的一条数据库的id值
function returnRstId($sql) {
if ($this->conn == '') {
$this->init_conn();
}
@mysql_query($sql);
if (mysql_errno() == 0) {
return mysql_insert_id();
} else {
return '';
}
}
// 获取对应的字段值
function getFields($sql, $fields) {
$this->mysql_query_rst($sql);
if (mysql_errno() == 0) {
if (mysql_num_rows($this->result) > 0) {
$tmpfld = @mysql_fetch_row($this->result);
$this->fields = $tmpfld[$fields];
}
return $this->fields;
} else {
return '';
}
}
// 错误信息
function msg_error() {
if (mysql_errno() != 0) {
$this->msg = mysql_error();
}
return $this->msg;
}
// 释放结果集
function close_rst() {
mysql_free_result($this->result);
$this->msg = '';
$this->fieldsNum = 0;
$this->rowsNum = 0;
$this->filesArray = '';
$this->rowsArray = '';
}
// 关闭数据库
function close_conn() {
$this->close_rst();
mysql_close($this->conn);
$this->conn = '';
}
// 取得数据库版本
function db_version() {
return mysql_get_server_info();
}
}
PHP函数封装!
你传入的 SQL 不应该那样传,可用性太低,函数或方法应该传入变量,或者说可变的值。上代码,不懂的问:
/* 封装函数 */
$arr = $_POST;
// $sql = "INSERT INTO ui234_user (username,password,u_name,u_time) VALUES (?,?,?,?)";
$table_name = "ui234_user";
$field_arr = array('username', 'password', 'u_name', 'u_time');
insert($arr, $table_name, $field_arr);
function insert($arr, $table_name, $field_arr) {
$sql = 'INSERT INTO ' . $table_name . ' (';
$field_name = ''; // 名称
$field_value = ''; // 值
$field_post = ''; // post取值
/* 拼装字段 */
foreach ($field_arr as $key => $value) {
if ($key == count($field_arr) - 1) {
$field_name .= $value;
$field_value .= '?';
$field_post .= '$arr["' . $field_name . '"]';
} else {
$field_name .= $value . ',';
$field_value .= '?,';
$field_post .= '$arr["' . $value . '"],';
}
}
$sql .= $field_name . ') VALUES (' . $field_value . ');';
$mysqli = connect();
$stmt = $mysqli->prepare("{$sql}");
$exe_str = '$stmt->bind_param("ssss", ' . $field_post . ');';
// 输出字符串结果
echo $sql . '<hr/>';
echo $exe_str;
// 然后用 eval 执行字符串代码
eval($exe_str); // 相当于是:$stmt->bind_param('ssss',$arr['username'],$arr['password'],$arr['u_name'],$arr['u_time']);
$stmt->execute();
}