两个参数 第一个参数字符串,第二个参数要进行转义的字符
/
/
$str = "I Don't wang to go shopping..";
$str = ucwords($str);
echo $str;//I Don't Wang To Go Shopping..
echo "";
//$str = addslashes($str);
$str = addcslashes($str,'.');
echo $str;//I Don't Wang To Go Shopping..
*/
当使用echo或print打印对象时会被调用toString()方法将对象转化为字符串
/
/
class magic
{
function toString()
{
return 'when you want to echo or print the object, toString() will be called';
}
}
$obj = new magic();
print $obj; //浏览器显示 when you want to echo or print the object, toString() will be called
*/
/
// myClass.php代码
class myClass
{
function myName()
{
echo "My Name Is xiaobudiu";
}
}
// yourClass.php代码
class yourClass
{
function yourName()
{
echo "Your Name Is pgone";
}
}
// autoload.php代码
function __autoload($name){
if(file_exists($name.".php")){
$path = $name . 'php';
require_once $path;
}else{
echo "The Path Is Error";
}
}
$my = new myClass();
$my -> myName();
$your = new yourClass();
$your -> yourName();
/
实例:假设当前目录下存在myClass.php和yourClass.php,并且代码和上面一样,autoload.php代码进行更改
/
/
function my_autoloader($class)
{
include $class.'.php';
}
spl_autoload_register('my_autoloader');
$my = new myClass();
$my->myName();
$your = new yourClass();
$your->yourName();
//此时运行autoload.php 执行结果 My Name Is xiaobudiu Your Name Is pgone
*/
语法:
abstract class class_name
{
abstract public function func_name1(arg1, arg2);
abstract public function func_name2(arg1, arg2, arg3);
}
*/
//示例:计算矩形的周长
/
abstract class Shape
{
abstract protected function get_area();
}
class Rectangle extends Shape
{
private $width;
private $height;
function __construct($width = 0, $height = 0)
{
$this->width = $width;
$this->height = $height;
}
function get_area()
{
echo ($this->width + $this->height) 2;
}
}
$Shape_Rect = new Rectangle(20, 10);
$Shape_Rect->get_area();
*/
/**
接口
interface
一种对下级代码的规范
与抽象类不同,一个子类可以继承自多个接口,接口之间用','隔开,
接口实现了php的多重继承
接口需要被继承,所以接口中定义的方法不能为私有方法或被final修饰
接口中定义的全部方法都必须被子类实现,并且不能包含实体
/
//示例:定义database接口
/
interface Database
{
function connect($host, $username, $pwd, $db);
function query($sql);
function fetch();
function close();
function test();
}
class mysql implements Database
{
protected $conn;
protected $query;
function connect($host, $username, $pwd, $db)
{
$this->conn = new mysqli($host,$username,$pwd,$db);
}
function query($sql)
{
return $this->conn->query($sql);
}
function fetch()
{
return $this->query->fetch();
}
function close()
{
$this->conn->close();
}
function test()
{
echo "test";
}
}
*/
//错误示范:
/
class father
{
final function test()
{
echo "My Name Is xiaobudiu";
}
}
class son extends father
{
function test()
{
echo "My Name Is PGone";
}
}
/
//执行程序,浏览器会报错 Fatal error: Cannot override final method father::test()
/**
clone
可通过clone关键字克隆一个对象,克隆后的对象相当于在内存中重新开辟了一个空间
克隆得到的对象拥有和原来对象相同的属性和方法
修改克隆得到的对象不会影响到原来的对象
/
//示例:
/
class father
{
public $name = 'xiaobudiu';
function test()
{
echo "test";
}
}
$obj = new father();
$obj_clone = clone $obj;
$obj_clone->name = 'PGone';
echo $obj_clone->name; //PGone
echo $obj->name //xiaobudiu
*/
// 如果使用"="将一个对象赋给一个变量,那么得到的将是一个对象得引用,通过这个变量改变属性的值将会影响原来的对象
// 示例:
/
class father
{
public $name = 'xiaobudiu';
function test()
{
echo "test";
}
}
$obj = new father();
$obj_clone = $obj;
$obj_clone->name = 'PGone';
echo $obj->name,$obj_clone->name;
// PGonePGone
/
/**
__clone()
可以使用__clone()魔术方法将克隆后的副本初始化
可以理解为当对象被克隆时自动调用这个方法
*/
//示例:
/
class father
{
public $name = 'xiaobudiu';
function test()
{
echo "test";
}
function __clone()
{
echo "hi,shuaige";
$this->name = 'PGone';
//当克隆对象时,克隆后的对象得到的将是此处的name属性值
}
}
$obj = new father();
$obj_clone = clone $obj; //触发__clone()方法 //hi,shuaige
echo $obj->name,$obj_clone->name;//xiaobudiuPGone
/
/**
instanceof关键字
instanceof可以检测对象属于哪个类
也可以用于检测生成实例的类是否继承自某个接口
/
//示例:
/
class father
{
public $name = 'xiaobudiu';
function test()
{
echo "test";
}
}
interface Database
{
function test();
}
class mysql implements Database
{
function test()
{
echo "test";
}
}
$obj = new father();
$mysql = new mysql();
var_dump($obj instanceof father);
var_dump($mysql instanceof Database);
var_dump($obj instanceof Database);
//bool(true) bool(true) bool(false)
*/
工厂模式的精髓就是可以根据不同的参数生成不同的类实例
/
//示例:加减乘除工厂类实例
//定义接口
/
interface Calc
{
public function getValue($num1,$num2);
}
//创建实现接口的实体类
class Add implements Calc
{
public function getValue($num1, $num2)
{
return $num1+$num2;
}
}
class Sub implements Calc
{
public function getValue($num1, $num2)
{
return $num1 - $num2;
}
}
class Mul implements Calc
{
public function getValue($num1, $num2)
{
return $num1 $num2;
}
}
class Div implements Calc
{
public function getValue($num1, $num2)
{
try {
if ($num2 == 0){
throw new Exception('除数不能为0');
} else {
return $num1 / $num2;
}
} catch (Exception $e) {
echo "错误信息:".$e->getMessage();
}
}
}
// 创建一个工厂,生成基于给定信息的实体类的对象
class Factory
{
public static function createObj($operate)
{
switch ($operate) {
case '+':
return new Add();
break;
case '-':
return new Sub();
break;
case '':
return new Mul();
break;
case '/':
return new Div();
break;
}
}
}
$test=Factory::createObj('-');
echo $test->getValue(1,4);
//注:其实想实现本功能,定义一个类,一个公共方法,方法里采用switch也可以实现本功能,但为了代码的可读性以及代码的执行效率,所以采用工厂类;
//注;这样,我们就实现了根据用户输入的操作符实例化相应的对象,进而完成接下来相应的操作.在软件开发中,php可能要链接mysql,也可能链接sqlserver.
//或者其他数据库,这样我们就可以定义一个工厂类,动态生成不同的数据库连接对象;
//再比如设计一个连接服务器的框架,需要三个协议,即pop3,imap,http,可以把这三个作为产品类,共同实现一个接口.工厂模式使用场景很多,需要在实
//际开发中尝试1应用
*/
/**
单例模式
单例模式涉及一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建
单例模式主要解决一个全局使用的类被频繁创建与销毁的问题
由于只创建了一个类的实例,因此减少了内存的开销,节省了系统资源
php中,单例模式经常被用在数据库应用中.
/
//代码示例:
/
class Student
{
//私有的静态属性, 作用是为了存储对象的.
private static $_instance=null;
//私有的构造方法,保证不允许在类外 new
private function construct(){}
//私有的克隆方法, 保证不允许在类外 通过 clone 来创建新对象
private function clone(){}
//公有的静态方法, 作用,就是用来实例化对象
public static function getInstance()
{
//将创建的新对象存储到静态属性中
//判断静态属性中是否为空
if (is_null(self::$_instance)) {
//如果为空,则创建新对象,并将新存储赋给静态属性$instance
self::$_instance = new self;
}
//如果$instance不为空,则直接将对象返回
return self::$_instance;
}
}
//调用静态方法来创建对象
$obj = Student::getInstance();
$obj2 = Student::getInstance();//此行不再创建新对象
//var_dump($obj);
//var_dump($obj2);
*/
`<?php
/**
/ $a = "aaa"; $b = "bbb"; echo $a.$b; /
/**
/ class a { function showName() { echo METHOD; echo "
"; echo FUNCTION; echo "
"; echo CLASS; echo FILE; echo DIR; } } $b = new a(); $b->showName();/
/**
/ switch ($type) { case 1: echo "11"; break; case 2: echo "12"; break; default : echo "13"; break; } /
/**
/ $i = 1; while ($i <= 10) { echo $i." "; $i++; } /
/**
/**
/**
/ $arr = [ 'name'=>'xiaobudiu', 'age'=>25, 'hobby'=> [ '1' => 'hobby', '2' => 'code' ] ]; foreach ($arr as $k => $v){ echo $k."=>".$v; echo " "; } /
/**
/ goto a; echo 'kkk'; echo '123'; a: echo 'bbb'; echo '525'; / //此部分代码浏览器显示为 //bbb525
/**
/ for($i = 0; $i < 10; $i++) { if($i == 3){ goto a; } echo $i; } a: echo "跳出循环"; / //浏览器显示为 //012跳出循环
/**
"; echo $x; // 2 */
/**
/**
/**
/**
/**
/**
/**
/**
/**
/*
/**
"; $str = trim($str); echo $str;//.abcded .gk.(空格去掉了) echo '
'; $str = ltrim($str,'.');//abcded .gk.(左边的点被去掉了) echo $str; echo '
'; $str = rtrim($str,'.');//(右侧的点被去掉了) echo $str; */
/**
/**
'. preg_quote($search[$k], '
'). ''; } } else { $search = '
'. preg_quote($search, ''). '
'; } return preg_replace($search, $replace, $subject, $limit); } $str = "abccddefccggcccg"; echo strReplaceLimit('cc', 'c',$str, 2); echo ''; */ // 浏览器显示:abcddefcggcccg(前两个cc都被替换了,最后一个ccc没有被替换)
/**
/*
/**
"; //$str = addslashes($str); $str = addcslashes($str,'.'); echo $str;//I Don't Wang To Go Shopping.. */
/**
/**
/**
"; $str = implode('-',$str); echo $str; //piece1-piece2-piece3 */
/**
/**
/**
/**
"; echo count($array,1); // 6 */
/**
/**
/**
/**
/**
/**
/**
/**
/*
/**
/**
/**
$array = ['beijing', 'shanghai', 'guangzhou', 'hangzhou', 'shenzhen']; $arrayTwo = ['haerbin', 'zhengzhou' => 'henan', 'nanjing']; / //for循环写法 for($i = 0; $i < count($array); $i++){ echo $array[$i]; echo '
'; } echo "
"; //foreach写法 foreach($arrayTwo as $v) { echo $v; echo ' '; } /
/**
/ / $array = ['beijing', 'shanghai', 'guangzhou', 'hangzhou', 'shenzhen']; list($a[1], $a[2], $a['x']) = $array; var_dump($a); */
/**
/**
/**
/**
/**
/**
//var_dump($_SERVER); //var_dump($_POST); //var_dump($_GET); / $name = $_POST['name']; $pass = $_POST['pass']; var_dump($_POST); /
/**
"; $_COOKIE['name'] = 'xiaobudiu'; $_COOKIE['pass'] = '56611'; echo "
/**
/* 取得日期时间信息
/**
*/
/**
/**
/**
"; echo strtotime('20161025102525'); */
/**
/ $start = 'last Friday'; $time1 = strtotime("$start + 1days"); echo date('Y-m-d H:i:s',$time1); /
/ $start = '20170430122531'; $end = '20180104224925'; //求两个时间戳的差 $diff_time = strtotime($end) - strtotime($start); //求相差多少天 $diff_days = floor($diff_time/(246060)); echo "两个时间相差".$diff_days."天"; /
/**
/**
*/
/ var_dump($_POST); echo "
"; var_dump($_FILES); /
/**
//function upLoadFiles() //{ // if ($_FILES['file']['error'] > 0) { // echo "Error:".$_FILES['file']['error']."
"; // } else { // echo "
"; $a = new myClass(); var_dump($a->getStatic()); */
/**
*/
//class myClass //{ // static $staticVal = 10; // public $val = 100; // // / // 获取类属性(静态属性 $staticVal) // / // static function getStaticVal() // { // echo self::$staticVal; // } // // / // 类内调用类属性,并对类属性进行改变 // / // static function changeStaticVal() // { // self::$staticVal++; // echo self::$staticVal; // } //} // //myClass::getStaticVal();//10 //myClass::changeStaticVal();//11
/**
"; $a = basename(FILE,".php"); echo $a; //index */
/**
//class yourClass //{ // // public $name; // public $age; // // / // yourClass constructor. // 构造方法 // 创建对象时自动调用此方法 // / // function __construct($name,$age) // { // $this->name = $name; // $this->age = $age; // } // // / // 析构方法 // destruct // 析构方法是在对象被销毁前自动执行的方法 // / // function destruct() // { // // } //} //$a = new yourclass('xiaoming',25); //echo $a->name;
/**
/**
/**
/**
/**
/**
*/
/**
/**
/**
//注:结合 property_exists() property_exists()用来检测类中是否定义了该属性 //用法:property_exists('magic',$key) 检测在magic类中是否定义了$key属性
/**
/**
/*
/**
/**
/ // myClass.php代码 class myClass { function myName() { echo "My Name Is xiaobudiu"; } } // yourClass.php代码 class yourClass { function yourName() { echo "Your Name Is pgone"; } } // autoload.php代码 function __autoload($name){ if(file_exists($name.".php")){ $path = $name . 'php'; require_once $path; }else{ echo "The Path Is Error"; } } $my = new myClass(); $my -> myName(); $your = new yourClass(); $your -> yourName(); /
/**
/**
语法: abstract class class_name { abstract public function func_name1(arg1, arg2); abstract public function func_name2(arg1, arg2, arg3); }
*/
//示例:计算矩形的周长
/ abstract class Shape { abstract protected function get_area(); } class Rectangle extends Shape { private $width; private $height; function __construct($width = 0, $height = 0) { $this->width = $width; $this->height = $height; } function get_area() { echo ($this->width + $this->height) 2; } } $Shape_Rect = new Rectangle(20, 10); $Shape_Rect->get_area(); */
/**
/ //示例:定义database接口 / interface Database { function connect($host, $username, $pwd, $db); function query($sql); function fetch(); function close(); function test(); } class mysql implements Database { protected $conn; protected $query; function connect($host, $username, $pwd, $db) { $this->conn = new mysqli($host,$username,$pwd,$db); } function query($sql) { return $this->conn->query($sql); } function fetch() { return $this->query->fetch(); } function close() { $this->conn->close(); } function test() { echo "test"; } } */
//类中的关键字
/**
//错误示范: / class father { final function test() { echo "My Name Is xiaobudiu"; } } class son extends father { function test() { echo "My Name Is PGone"; } } / //执行程序,浏览器会报错 Fatal error: Cannot override final method father::test()
/**
// 如果使用"="将一个对象赋给一个变量,那么得到的将是一个对象得引用,通过这个变量改变属性的值将会影响原来的对象 // 示例: / class father { public $name = 'xiaobudiu'; function test() { echo "test"; } } $obj = new father(); $obj_clone = $obj; $obj_clone->name = 'PGone'; echo $obj->name,$obj_clone->name; // PGonePGone /
/**
//示例: / class father { public $name = 'xiaobudiu'; function test() { echo "test"; } function __clone() { echo "hi,shuaige"; $this->name = 'PGone'; //当克隆对象时,克隆后的对象得到的将是此处的name属性值 } } $obj = new father(); $obj_clone = clone $obj; //触发__clone()方法 //hi,shuaige echo $obj->name,$obj_clone->name;//xiaobudiuPGone /
/**
/**
/**
/**
/单字符元字符 // 零次或多次匹配前面的字符或表达式 zo 与"z"和"zoo"匹配 {0,} //+ 一次或多次匹配前面的字符或表达式 zo+ 与"zo"和"zoo"匹配,但与"z"不匹配 {1,} //? 零次或一次匹配前面的字符或表达式 zo? 与"z"和"zo"匹配,但与"zoo"不匹配 {0,1} //^ 匹配搜索字符串开始的位置 ^\d{3} 与搜索字符串开始处的3个数字匹配 //^ 如果将^用作括号表达式的第一个字符,就会对字符集求反 比如: [^abc] 匹配除abc以外的任何字符 //$ 匹配搜索字符串结尾的位置 \d{3}$ 与搜索字符串结尾处的3个数字匹配 //. 匹配除换行符\n之外的任何单个字符 a.c与"abc","alc"和"a-c"匹配 //. 若要匹配包括\n在内的任意字符,可以使用[\s\S]之类的模式(\s \S属于'非打印字符') //[] 标记括号表达式的开始和结尾 [1-4]与"1","2","3","4"匹配 [^aeiouAEIOU]与任何非元音字符匹配 //{} 标记限定符表达式的开始和结尾 a{2,3}与"aa"和"aaa"匹配 //() 标记子表达式的开始和结尾,可以保存子表达式,以备将来之用 A(\d)与"A0"至"A9"匹配 //| 指示在两个或多个选项之间进行选择 z|food 与"z"或"food"匹配; (z|f)ood与"zood"或"food"匹配 /// 表示JScript中的文本正则表达式模式的开始或结尾.在第二个"/"后添加单字符标志可以指定搜索行为 /// /abc/gi 是与"abc"匹配的JScript文本正则表达式.g(全局)标志指定查找模式的所有匹配项,i(忽略大小写)标志使搜索不区分大小写 //\ 转义字符 \与"\"匹配, (与"("匹配, \n与换行符匹配 / /多字符元字符 \b 与一个字边界匹配(即字与空格间的位置) er\b与"never"中的"er"匹配,但与"verb"中的"er"不匹配 \B 与非边界字匹配 er\B与"verb"中的er匹配,但与"never"中的er不匹配 \d 与数字字符匹配,等效于[0-9] \d{2}与"12 345"中的"12"和"34"匹配 \D 与非数字匹配,等效于[^0-9] \D+与"abc123 def"中的'abc"和"def"匹配 \w 与a-z,A-Z,0-9,和下划线中的任意字符匹配 在"my name is xiaobudiu..."中,\w与"my","name","is","xiaobudiu"匹配 \W 与除a-z,A-Z,0-9,和下划线中的任意字符匹配 等效于[^a-zA-Z0-9] [xyz] 字符集,与任何一个指定字符匹配 [abc]与"plane"中的a匹配 [^xyz] 反向字符集,与未指定的任何字符匹配 [a-z] 字符范围,匹配指定范围内的任何字符 [^a-z] 反向字符范围,与不在指定范围内的任何字符匹配 {n} 正好匹配n次,n是非负整数 o{2}与'Bob'中的"o"不匹配,但与"food"中的"oo"匹配 {n,} 至少匹配n次,n是非负整数 o{2,}与'Bob'中的'o'不匹配,但与"fooood"中的所有"o"匹配 {n,m} 匹配至少n次,至多m次 在搜索字符串"1234567"中,\d{1,3}与"123","456"和"7"匹配 (模式) 与模式匹配并保存匹配项 (Chapter|Section) [1-9]与"Chapter 5"匹配,保存"Chapter"以备将来之用 (?:模式) 与模式匹配,但不保存匹配项以备将来之用 industr(?:y|ies)与industry|industries相等 /
/非打印字符 \f 换页符 \n 换行符 \r 回车符 \t Tab字符 \v 垂直制表符 \s 任何空白字符,包括空格,制表符,换页符 等效于[\f\n\r\t\v] \S 任何非空白字符 等效于[^\f\n\r\t\v] /
--------------------------- 正则表达式正式部分 -------------------------------------
/**
/**
/ $subject = "abcdefghijkdef"; $pattern_1 = '/def/'; $num = preg_match($pattern_1, $subject); var_dump($num); / // int(1)
/**
/**
/ //浏览器显示: array(2) { [1]=> string(3) "def" [4]=> string(6) "abcdef" } array(4) { [0]=> string(3) "abc" [2]=> string(3) "efg" [3]=> string(4) "hijk" [5]=> string(6) "defabc" } /
/**
/**
/**
//$subject = "I LIKE APPLE,AND YOU"; //$patern = '/[\s,]+/'; //var_dump(preg_split($patern,$subject));
/ array(5) { [0]=> string(1) "I" [1]=> string(4) "LIKE" [2]=> string(5) "APPLE" [3]=> string(3) "AND" [4]=> string(3) "YOU" } /
/**
/**
/error_reporting(0);//设置错误级别为0,不报错 function theDatabaseObj() { $mysql = mysqli_connect('127.0.0.1','root2','root'); if($mysql){ return $mysql; }else{ throw new Exception("could't connect to the database,try again"); } } function db(){ try{ $db = theDatabaseObj(); var_dump($db); } catch (Exception $e){ echo $e->getMessage(); // echo $e->getCode(); // echo $e->getLine(); } } db();/
/**
/ /class aException extends Exception { function aEX() { return "This is the bad way"; } } class aaa { function a() { if (2 < 1) { echo "wrong"; } else { throw new aException('你错了,太笨了le'); } } function b() { try{ $b = $this->a(); var_dump($b); }catch (Exception $E) { echo $E->getMessage(); } } } $obj = new aaa(); $obj->b();*/
//实现的功能,调用exception异常处理 / function aaa() { if($_GET['name'] == 'xiaobudiu') { return "尊贵的管理员,请登录"; } else { throw new Exception('你没有权限登录'); } } function upload() { try { $upload = aaa(); var_dump($upload); } catch (Exception $e) { echo $e->getMessage(); } } upload();/
/**.
-------------------------------- 图像处理 -------------------------------------
/**
/**
/浏览器结果 Array ( [0] => 740 //宽度像素值 [1] => 1166 //高度像素值 [2] => 2 //图像标记,gif是1,jpg是2,png是3,swf是4,psd是5.... [3] => width="740" height="1166" //文本字符串 [bits] => 8 //每种颜色的位数 [channels] => 3 //RGB图像是3,CMVK图像是4 [mime] => image/jpeg ) /
/**
/浏览器结果: array(7) { [0]=> int(740) [1]=> int(1166) [2]=> int(2) [3]=> string(25) "width="740" height="1166"" ["bits"]=> int(8) ["channels"]=> int(3) ["mime"]=> string(10) "image/jpeg" } /
/**
/**
/ //创建一个空白画布,并输出一个png格式的图片 header("Content-type:image/png");//设置mime类型 $image = @imagecreate(120,30) or die("Cannot Initialize new GD image stream"); //创建画布 $background_color = imagecolorallocate($image,255,255,0);//定义颜色 imagepng($image);//输出png格式图像 imagedestroy($image);//销毁图像资源,释放内存 /
/**
/**
/**
//echo "";//生成图片
--------------------------------- 目录文件操作 --------------------------------------
/**
/**
/**
/**
/**
/ //$dir = './'; //$dir1 = scandir($dir,1); //var_dump($dir1); / array(16) { [0]=> string(9) "test.html" [1]=> string(11) "option.html" [2]=> string(11) "indexx.html" [3]=> string(9) "index.php" [4]=> string(5) "index" [5]=> string(11) "favicon.ico" [6]=> string(8) "code.php" [7]=> string(2) "aa" [8]=> string(6) "Upload" [9]=> string(6) "Public" [10]=> string(5) "2.css" [11]=> string(5) "1.php" [12]=> string(5) "1.css" [13]=> string(5) ".idea" [14]=> string(2) ".." [15]=> string(1) "." } */
/**
/**
//echo disk_total_space('/');//191392714752
/**
/**
"; } fclose($file); / / //要求:读取code.php中所有行数内容 //打开文件 $file = fopen('code.php',"r"); //读取文件 while(!feof($file)){//只要不读到末尾,就输出本行 echo fgets($file)."
"; } fclose($file); */
/**
/**
/**
/**
/**
/**
/**
/* 移动或重命名文件
/**
------------------------------ COOKIE 及 SESSION -------------------------------------
/**
/**
/**
/**
/ //开启session会话 / session_start(); //设置session $_SESSION['name'] = 'xiaobudiu'; session_id(); var_dump($_SESSION); echo "
"; var_dump($_COOKIE); */
//var_dump(get_loaded_extensions()); /**
*/
--------------------------- Mysql数据库的使用 ------------------------------------
/**
*/
/**
*/ /**
/ / $db = new mysqli('localhost','root','root','test'); $sql = "insert into
user
(username
,email
) VALUES (?,?)"; //定义参数 $username = "xiaobudiu"; $email = "xiaobudiu163@126.com"; //预处理 $sm = $db->prepare($sql); //绑定参数 $sm->bind_param('ss',$username,$email); //执行语句 if($sm->execute()) { echo "Insert Successfully"; } $db->close(); *//* MYSQLi查询数据 / / $db = new mysqli('localhost','root','root','test'); $sql = "select from user where uid<4"; $re = $db->query($sql); echo "
/ / array(3) { ["uid"]=> string(1) "1" ["username"]=> string(4) "kate" ["email"]=> string(12) "kate@126.com" } array(3) { ["uid"]=> string(1) "2" ["username"]=> string(5) "admin" ["email"]=> string(12) "admin@qq.com" } array(3) { ["uid"]=> string(1) "3" ["username"]=> string(4) "mary" ["email"]=> string(14) "mary@itcast.cn" } //**
username
,email
) VALUES ('xiaowangba','sandjdsa@163.com')"; $re = $pdo->exec($sql); if ($re) { echo "向数据库插入数据成功"; } else { var_dump($pdo->errorInfo()); } *//**
/**
/ / $dsn='mysql:dbname=test;host=127.0.0.1'; $user = 'root'; $pass = 'root'; $pdo = new PDO($dsn,$user,$pass); $sql = "delete from user where uid=7"; if ($pdo->exec($sql)) { echo "删除数据成功"; } else { var_dump($pdo->errorInfo()); } */
/**
username
,email
from user whereuid
BETWEEN 2 AND 8"; //预处理 $re = $pdo->prepare($sql); $re->execute(); $arrs = $re->fetchAll(); echo " /------------------------------------------- PHP 与 Redis ------------------------------------------
/**
/**
/**
--------------------------------------- XML -----------------------------------------------
/**
/ / header('Content-type:text/xml'); $xmlstr=<<<XML <?xml version='1.0' standalone='yes'?>
XML; echo $xmlstr; //注: <<<xml 作用:将"<<<xml"和最后的"xml"之间的内容转换成字符串; / /
*/
/**
/ / header('Content-type:text/xml'); echo '<?xml version="1.0" ?>'."\n"; echo "\n";
$books = [
[
'bookname' =>'微信小程序开发实战与应用实例',
'press'=>'清华大学出版社',
'publishtime'=>'2016-07'
],
[
'bookname'=>'一周微信公众号开发入门到精通',
'press'=>'延安出版社',
'publishtime'=>'2017-5'
]
];
foreach ($books as $book) {
echo " \n";
foreach ($book as $tag=>$value){
echo " <$tag>".htmlspecialchars($value)."</$tag>\n";
}
echo " \n";
}
echo " ";
*/
/*
*/
/**
XML; $xml = simplexml_load_string($xmlstr); var_dump($xml);//将字符串变成xml对象 echo $xml->movie->title; echo ":"; echo $xml->movie->characters->character[0]->name; //获取属性值 echo $xml->movie->title['tt'] */
---------------------------------------- json的使用 ----------------------------------------
/**
/**
/**
------------------------------------ MVC与ThinkPHP框架 ---------------------------------------------
/**
/**
/**
*/
---------------------------------- 设计模式 --------------------------------------------
/**
/**
/**
//示例1 //观察者模式设计两个类 //男人类和女人类 //男人类对象 xiaoming 女人类对象 xiaohua mother / class man { //定义数组属性,用于存放观察者对象 protected $observers=[]; //将传进来的观察者对象存入观察者数组中的方法 function addObserver($observer) { $this->observers[]=$observer; } //删除观察者的方法 function delObserver($observer) { //查找观察者在数组中的键值 $key=array_search($observer,$this->observers); //根据键值删除对应观察者 unset($this->observers[$key]); } //男人buy()方法 function buy() { foreach ($this->observers as $girl) { //当被观察者作出buy()这个行为时,让观察者得到通知,并作出相应的反应 $girl->dongjie(); } } } class woman { function dongjie(){ echo "你的儿子或者男朋友正在花钱
"; } } //创建被观察着对象 $xiaoming = new man(); //创建观察者对象 $xiaohua = new woman(); $mother = new woman(); //为xiaoming添加观察者 $xiaoming->addObserver($mother); $xiaoming->addObserver($xiaohua); //$xiaoming->delObserver($xiaohua); //xiaomign执行buy()之后,看观察者xiaohua和mother是否能得到通知,并作出相应反应 $xiaoming->buy(); /
//示例2: /**
--------------------------------- 定义观察者、被观察者接口 -----------------------------
/* //观察者接口(通知接口) interface guancha { function onBuyTicketOver($sender, $args); //得到通知后调用的方法 } //被观察者接口(主题接口) interface beiguancha { function addObserver($observer); //提供添加观察者的方法 } /主题类实现/// //主题类(购票)实现主题接口(被观察者) class buyPiao implements beiguancha { private $_observers = []; //数组存放观察者对象 public function buyTicket($ticket) //购票核心类,处理购票流程 { //购票逻辑 //循环通知,调用其onBuyTicketOver实现不同业务逻辑 foreach ($this->_observers as $obs) { $obs->onBuyTicketOver ($this, $ticket); //$this 可用来获取主题类句柄,在通知中使用 } } //添加通知 public function addObserver($observer) //添加N个通知 { $this->_observers [] = $observer; } }
--------------------------------------- 定义多个通知 ------------------------------------
//短信日志通知 class HipiaoMSM implements guancha { public function onBuyTicketOver($sender, $ticket) { echo (date ( 'Y-m-d H:i:s' ) . " 短信日志记录:购票成功:$ticket
"); } } //文本日志通知 class HipiaoTxt implements guancha { public function onBuyTicketOver($sender, $ticket) { echo (date ( 'Y-m-d H:i:s' ) . " 文本日志记录:购票成功:$ticket
"); } } //抵扣卷赠送通知 class HipiaoDiKou implements guancha { public function onBuyTicketOver($sender, $ticket) { echo (date ( 'Y-m-d H:i:s' ) . " 赠送抵扣卷:购票成功:$ticket 赠送10元抵扣卷1张。
"); } }
------------------ 用户购票 ------------------
$buy = new buyPiao(); $buy->addObserver ( new HipiaoMSM () ); //根据不同业务逻辑加入各种通知 $buy->addObserver ( new HipiaoTxt () ); $buy->addObserver ( new HipiaoDiKou () ); //购票 $buy->buyTicket ( "一排一号" ); */
/**
*/
------------------------------------------- 开始进入API的世界 ------------------------------------------------
/**
*/
---------------------- 传输消息加解密 --------------------------
/**
/**
*/ /**
*/ //示例1
/ $str = "我的名字是?一般人我不告诉他!"; //加密内容 $key = "key25111"; //密钥 $cipher = MCRYPT_DES; //密码类型 $modes = MCRYPT_MODE_ECB; //密码模式 $iv = mcrypt_create_iv(mcrypt_get_iv_size($cipher, $modes), MCRYPT_RAND);//初始化向量 echo "加密明文:".$str."
"; $str_encrypt = mcrypt_encrypt($cipher, $key, $str, $modes, $iv); //加密函数 echo "加密密文:".$str_encrypt."
"; $str_decrypt = mcrypt_decrypt($cipher, $key, $str_encrypt, $modes,$iv); //解密函数 echo "还原:".$str_decrypt;
//* 非对称加密
------------------------------- 使用ajax进行交互 ----------------------------------
/**
//检测用户名是否可用 //假设用户名为zhangsan和lisi已经被使用了 /* html代码 <!DOCTYPE html>
*/ /* php代码 / / $name = $_GET['name']; if ($name == 'zhangsan') { echo 1; } else { echo 2; } */`