跳至主要內容

php实例教程

Moments大约 17 分钟

php实例教程


php如何处理进制转换

  • 十进制转二进制decbin()
echo decbin(12); //输出 1100
  • 十进制转八进制 decoct()
echo decoct(15); //输出 17
  • 十进制转十六进制 dechex()
echo dechex(10); //输出 a
  • 二进制转十六制进 bin2hex()
$binary = "11111001";
$hex = dechex(bindec($binary));
echo $hex;//输出f9
  • 二进制转十制进 bindec()
echo bindec('110011'); //输出 51
  • 八进制转十进制 octdec()
echo octdec('77'); //输出 63
  • 十六进制转十进制 hexdec()
echo hexdec("F"); //输出 15
  • 任意进制转换 base_convert()
$hexadecimal = 'A37334';
echo base_convert($hexadecimal, 16, 2);//输出 101000110111001100110100

php缓冲区

// 开启缓冲控制
ob_start();
for ($i=0; $i<10;$i++)
{
    echo $i;
}
// 这此时页面显示0123456789

// 获取缓冲内容
$output = ob_get_contents();

// 清空缓冲区,此时页面显示为空了
ob_clean();

// 这此时页面显示0123456789
echo $output;

// 此时页面显示为空了,ob_get_clean()清空并返回缓冲内容
$obput = ob_get_clean();

// 此时页面显示为0123456789
echo $obput;

// 结果:0123456789

自加、自减、三目运算符

#自加
$a=10;
echo $a++; //先用再加,最后结果为10
echo ++$a; //先加再用,最后结果为11
$a = 10;
$b = $a+ ++++$a;
echo $a; //结果为12
echo "
";
echo $b; //结果为22
#结合性导致的问题(++的优先级比+的高,且为右结合)

instanceof例子

instanceof 用于确定一个 PHP 变量是否属于某一类 class 的实例:

<?php
class MyClass
{
}

class NotMyClass
{
}
$a = new MyClass;

var_dump($a instanceof MyClass);
var_dump($a instanceof NotMyClass);
?>

php编码转换

$myvar = "中国";
#mb_convert_encoding("要转换的字符串","目标编码","源编码");
echo mb_convert_encoding($myvar,"gb2312","utf-8");
echo nl2br("\n");
#iconv("源编码","目标编码","要转换的字符串");
echo iconv("utf-8","gb2312",$myvar);

php类型转换

类C强制转换

#第一种转换方式: (int)  (bool)  (float)  (string)  (array) (object)
2.$num1=3.14;
3.$num2=(int)$num1;
4.var_dump($num1); //输出float(3.14)
5.var_dump($num2); //输出int(3)

获取变量整数、浮点、字符串值

#第二种转换方式:  intval()  floatval()  strval()
2.$str="123.9abc";
3.$int=intval($str);     //转换后数值:123
4.$float=floatval($str); //转换后数值:123.9
5.$str=strval($float);   //转换后字符串:"123.9"

使用settype()封装函数

#bool settype ( mixed &$var , string $type )
type 的可能值为:
“boolean” (或为“bool”,从 PHP 4.2.0 起)
“integer” (或为“int”,从 PHP 4.2.0 起)
“float” (只在 PHP 4.2.0 之后可以使用,对于旧版本中使用的“double”现已停用)
"string"
"array"
"object"null” (从 PHP 4.2.0 起)
2.$num4=12.8;
3.$flg=settype($num4,"int");
4.var_dump($flg);  //输出bool(true)
5.var_dump($num4); //输出int(12)

php字符串

多行字符串使用

heredoc类似于双引号可以解析变量

$name = 'Hello';
echo <<<EOD
里面的变量$name会解析。
EOD;
// 可以使用花括号进行变量范围定位

nowdoc类似于单引号不会解析变量

$name = 'Hello';
echo <<<'EOD'
里面的变量$name不会解析。
EOD;

字符串截取单个字符

//修改第一个字符,从0开始
$myvar[0] = 'Q';
//取得第一个字符
$first = $myvar[0];
//取得最后一个字符
$last = $myvar[strlen($myvar)-1];    
#字符串可以用 '.'(点)运算符连接起来

获取字符串的部分

//多字节,获取字符串的部分
$return = mb_substr($myvar,0,3,"utf-8");
//输出:你好M
$return = mb_strstr($myvar,"Mo",false,"utf-8");
//输出:Moments
$return = mb_strstr($myvar,"M",true,"utf-8");
//输出:你好 
//对待一个UTF8的中文字符是3个长度
//对待一个gbk的中文字符是2个长度
header("content-Type:text/html;charset=utf-8");
//设置内部编码
mb_internal_encoding('UTF-8');
//测试
$cn_str="钓鱼岛是中国的hehe";
$en_str="this is just a test";
//使用substr
echo substr($cn_str,0,3).'<br/>'; //钓
echo substr($en_str,0,3).'<br/><br/>';   //thi
//使用mbsubstr()
echo "mb_substr-3:".mb_substr($cn_str,0,3).'<br/>';   //钓鱼岛    按照字来划分
echo "substr-3:".substr($cn_str,0,3).'<br/>';//钓   按照字节来划分
echo "mb_strcut-3:".mb_strcut($cn_str,0,3).'<br/><br/>'; //钓   按照字节来划分

echo "mb_substr-4:".mb_substr($cn_str,0,4).'<br/>';   //钓鱼岛    按照字来划分
echo "substr-4:".substr($cn_str,0,4).'<br/>'; //钓   按照字节来划分(出现乱码)
echo "mb_strcut-4:".mb_strcut($cn_str,0,4).'<br/><br/>'; //钓   按照字节来划分(不会出现乱码)

echo strlen($cn_str).'<br/>';   //26
echo mb_strlen($cn_str).'<br/>';  //12
echo iconv_strlen($cn_str).'<br/>';//26 

字符串分割

explode()函数把字符串打散为数组。
#实例
$str = "Hello world. I love Shanghai!";
print_r (explode(" ",$str));
#输出结果
Array ( [0] => Hello [1] => world. [2] => I [3] => love [4] => Shanghai! )

字符串合并

implode() 函数返回由数组元素组合成的字符串。        
$arr = array('Hello','World!','I','love','Shanghai!');
echo implode(" ",$arr);
#输出结果
Hello World! I love Shanghai!

插入html换行符

$myvar = "Hello World!\nMoments";
echo nl2br($myvar);

PHP字符串加密(不可逆加密)

#md5加密
$myvar = "Moments";
echo md5($myvar);
echo nl2br("\n");
#crypt()加密
echo @crypt($myvar,"qq");

PHP字符串可逆加密

#base64加密
$myvar = "Moments";
$result = base64_encode($myvar);
echo $result;
echo nl2br("\n");
$result = base64_decode($result);
echo $result;
echo nl2br("\n");
#urlencode链接加密
$myvar = "http://www.pythonschool.com";
$result = urlencode($myvar);
echo $result;
echo nl2br("\n");
$result = urldecode($myvar);
echo $result;

addslashes

使用反斜线引用字符串。

$str = "what's your name?";
// 输出:what\'s your name?
echo addslashes($str);

chr

返回相对应于ascii所指定的单个字符。

// 输出A
echo chr(65); 

chunk_split

将字符串分割成小块

$a = "ABCD";
// 输出A@B@C@D@
echo ($a = chunk_split($a, 1, '@')) . "\r\n";
// 输出A@B@C@D
echo chop($a, '@');

count_chars

统计字符出现的次数

$a = "Hello World!";
print_r(count_chars($a, 1));
Array
(
    [32] => 1
    [33] => 1
    [72] => 1
    [87] => 1
    [100] => 1
    [101] => 1
    [108] => 3
    [111] => 2
    [114] => 1
)

crypt

对称加密

// Mo4BbD57XJI9U
echo crypt("password","Moments");

explode

使用一个字符串分割另一个字符串,结果为数组

array explode(string $delimiter, string $string[, int $limit])

htmlspecialchars

将特殊字符转换为HTML实体

string htmlspecialchars(cstring $string[, int $flags=ENT_COMPAT|ENT_HTML401[, 
string $encoding=ini_get("default_charset")[, bool $double_encode = TRUE]]])
// &lt;&amp;&gt;
echo ($a = htmlspecialchars('<&>')) . "\r\n";
// <&>
echo htmlspecialchars_decode($a);

implode

将一个一维数组的值转化为字符串。

$arr = ['A', 'B', 'C'];
$s = implode('@', $arr);
echo $s;

ord

返回字符的ASCII码值

$a = 'A';
echo ord($a) . "\r\n";
echo chr(ord($a));

parse_str

将字符串解析成多个变量

$a = "name=Moments&type[]=0&type[]=1";
parse_str($a, $output);
print_r($output);

similar_text

计算两个字符串的相似度

int similar_text(string $first, string $second [, float &$percent])
$a = 'Hello World!';
$b = 'hello world!';
similar_text($a, $b, $percent);
echo $percent;

str_pad

使用另一个字符串填充字符串为指定长度

string str_pad(string $input, int $pad_length [, string $pad_string = "" [, int $pad_type=STR_PAD_RIGHT]])
$a = 'AAAA';
// ***AAAA*** 
echo str_pad($a, 10, '*', STR_PAD_BOTH);

str_repeat

重复一个字符串

string str_repeat(string $input, int $multiplier)
$a = 'AAAA';
// ***AAAA******AAAA******AAAA*** 
echo str_repeat(str_pad($a, 10, '*', STR_PAD_BOTH), 3);

strip_tags

从字符串中却除HTML和PHP标记

string strip_tags(string $str [, string $allowable_tags])
$a = '<h1>Hello World!</h1>';
// Hello World!
echo strip_tags($a);

strstr

查找字符串的首次出现

string strstr(string $haystack, mixed $needle [, bool $before_needle = FALSE ])
$a = 'name=Moments';
echo strstr($a, '=', true);
echo "\n".join(explode('=', $a));

strpos

查找字符串首次出现的位置

$a = 'name=Moments';
if (stripos($a, '=') !== false){
    echo '存在=字符串';
}

trim

去除字符串首尾处的空白字符

string trim(string $str [, string $character_mask = "\t\n\r\0\x0B"])

// 如果第二个参数不指定,则默认为
" " (ASCII 32 (0x20)),普通空格符。
"\t" (ASCII 9 (0x09)),制表符。
"\n" (ASCII 10 (0x0A)),换行符。
"\r" (ASCII 13 (0x0D)),回车符。
"\0" (ASCII 0 (0x00)),空字节符。
"\x0B" (ASCII 11 (0x0B)),垂直制表符。

substr

返回字符串的子串

string substr(string $string, int $start [, int $length]) 
$a = 'Hello World!';
// Hello World
echo substr($a, 0, -1); 

php数组

#返回查找到的元素下标
$myarr = array("A","B","C");
echo array_search("B",$myarr);

array_push

队尾添加数据

#返回增加后数组的大小
$myarr = array("A","B","C");
echo array_push($myarr,"D");
print_r($myarr);

array_unique

#返回删除重复元素后的数组
$myarr = array("A","B","C","B");
print_r(array_unique($myarr));
#unset无返回值
$myarr = array("A","B","C");
unset($myarr[2]);

array_chunk

将一个数组分割成多个

$myarr = array("A","B","C");
$myarr = array_chunk($myarr,2,true);
print_r($myarr);
array array_chunk(array $array, int $size [, bool $preserve_keys = false])
$arr = ['001'=>'a', 'b', 'c'];
$result = array_chunk($arr, 2, true);
print_r($result);
// 结果
Array
(
    [0] => Array
        (
            [001] => a
            [0] => b
        )
    [1] => Array
        (
            [1] => c
        )
)

array_column

返回数组中指定的一列

array array_column(array $input, mixed $column_key [, mixed $index_key = null])
$arr = [['id'=>'001', 'name'=>'Moments'], ['id'=>'002', 'name'=>'ayu']];
$result = array_column($arr, 'name', 'id');
print_r($result);
// 结果
Array
(
    [001] => Moments
    [002] => ayu
)

array_combine

创建一个数组,用一个数组的值作为其键名,另一个数组的值作为其值

array array_combine(array $keys, array $values)
$a = ['001', '002'];
$b = ['Moments', 'ayu'];
$result = array_combine($a, $b);
print_r($result);
// 结果
Array
(
    [001] => Moments
    [002] => ayu
)

array_count_values

统计数组中所有的值

array array_count_values(array $array)
$arr = [1, 'A', 'A'];
$result = array_count_values($arr);
ksort($result);
print_r($result);
// 结果
Array
(
    [A] => 2
    [1] => 1
)

array_diff

计算数组的差集

array array_diff(array $array1, array $array2 [, array $...])
$a = ['id'=>'001', 'name'=>'Moments'];
$b = ['id'=>'002', 'name'=>'ayu'];
$result = array_diff($a, $b);
print_r($result);
$result = array_diff_key($a, $b);
print_r($result);
$result = array_diff_assoc($a, $b);
print_r($result);
// 结果
Array
(
    [id] => 001
    [name] => Moments
)
Array
(
)
Array
(
    [id] => 001
    [name] => Moments
)

array_filter

用回调函数过滤数组中的单元

array array_filter(array $array [, callable $callback [, int $flag = 0]])
function myFun($data){
	return !($data & 1);
    // return $data % 2 == 0;
}
$arr = [1,2,3,4,5];
$result = array_filter($arr, "myFun");
print_r($result);
// 结果
Array
(
    [1] => 2
    [3] => 4
)

array_flip

交换数组中的键和值

array array_flip(array $array)
$arr = ['id'=>'001', 'name'=>'Moments'];
$result = array_flip($arr);
print_r($result);
// 结果
Array
(
    [001] => id
    [Moments] => name
)

array_intersect

计算数组的交集

array array_intersect(array $array1, array $array2 [, array $...])
$a = ['id'=>'001', 'name'=>'Moments'];
$b = ['id'=>'001', 'name'=>'ayu'];
$result = array_intersect($a, $b);
print_r($result);
$result = array_intersect_key($a, $b);
print_r($result);
$result = array_intersect_assoc($a, $b);
print_r($result);
// 结果
Array
(
    [id] => 001
)
Array
(
    [id] => 001
    [name] => Moments
)
Array
(
    [id] => 001
)

array_key_exists

检查数组里是否有指定的键名或索引

bool array_key_exists(mixed $key, array $array)
$arr = ['id'=>'001', 'name'=>'Moments'];
$result = array_key_exists('id', $arr);
echo $result;
// 结果
1

array_keys

返回数组中部分的或所有的键名

array array_keys (array $array [, mixed $search_value = null [, bool $strict = false]])
$arr = ['id'=>'001', 'name'=>'Moments', 'id_2'=>'001'];
$result = array_keys($arr, '001', true);
print_r($result);
// 结果
Array
(
    [0] => id
    [1] => id_2
)

array_map

为数组的每个元素应用回调函数

array array_map(callable $callback, array $array1 [, array $...])
function cube($n){
    return $n * $n * $n;
}

$arr = [1,2,3];
$result = array_map('cube', $arr);
print_r($result);
// 结果
Array
(
    [0] => 1
    [1] => 8
    [2] => 27
)

array_merge

合并一个或多个数组

$myarr1 = array("one","two");
$myarr2 = array("three","four");
$myarr3 = array_merge($myarr1, $myarr2);
print_r($myarr3);  
array array_merge(array $array1 [, array $...])
$a = ['id'=>'001', 'name'=>'Moments'];
$b = ['id'=>'002', 'name'=>'Ayu'];
$result = array_merge($a, $b);
print_r($result);
$result = $a + $b;
print_r($result);
// 结果
Array
(
    [id] => 002
    [name] => Ayu
)
Array
(
    [id] => 001
    [name] => Moments
)

array_multisort

对多个数组或多维数组进行排序

bool array_multisort(array &$array1 [, mixed $array1_sort_order = SORT_ASC [,
mixed $array1_sort_flags = SORT_REGULAR [, mixed $...]]])
$a1=array("A","B","B","C");
$a2=array(1,2,3,4);
array_multisort($a1,SORT_ASC,$a2,SORT_DESC);
print_r($a1);
print_r($a2);
// 结果
Array
(
    [0] => A
    [1] => B
    [2] => B
    [3] => C
)
Array
(
    [0] => 1
    [1] => 3
    [2] => 2
    [3] => 4
)

array_pop

弹出数组最后一个单元(出栈)

mixed array_pop(array &$array)
$a = 'Hello World!';
$arr = str_split($a, 1);
array_pop($arr);
$a = ''.join($arr);
print_r($a);
// 结果
Hello World

array_rand

从数组中随机取出一个或多个单元

mixed array_rand(array $array [, int $num = 1])
$arr = ['a', 'b', 'c', 'd', 'e'];
$result = array_rand($arr, 2);
foreach($result as $key=>$array_replacevalue){
    echo $arr[$value] . "\r\n";
}
// 结果
b
e

php函数

用户自定义函数

<?php
function makecoffee($type = "cappuccino")
{
    return "Making a cup of $type.\n";
}
echo makecoffee();
echo makecoffee(null);
echo makecoffee("espresso");
?>

引用传递参数

<?php
function add_some_extra(&$string)
{
    $string .= 'and something extra.';
}
$str = 'This is a string, ';
add_some_extra($str);
echo $str;    // outputs 'This is a string, and something extra.'
?>

可变数量的参数列表

<?php
function sum(...$numbers) {
    $acc = 0;
    foreach ($numbers as $n) {
        $acc += $n;
    }
    return $acc;
}

echo sum(1, 2, 3, 4);
?>

php如何处理参数传递

#按值传递
function myfun($myvar){
    $myvar = "Moments";
}
$myvar = "Hello World!";
myfun($myvar);
echo $myvar;
#输出的结果为Hello World!
#引用传递
function myfun(&$myvar){
    $myvar = "Moments";
}
$myvar = "Hello World!";
myfun($myvar);
echo $myvar;
#输出的结果为Moments

php文件

逐行读取文件

fgets()函数用于从文件中逐行读取文件.

$file = fopen("ok.txt", "r");
while(!feof($file)){
    echo fgets($file);
}
fclose($file);

逐字符读取文件

$file = fopen("ok.txt", "r")
while(!feof($file)){
    echo fgetc($file);
}
fclose($file);

新建文件

$fp = fopen("myfile.txt","w");
fclose($fp);

文件写入

$fp = fopen("myfile.txt","w");
fwrite($fp,"Hello Moments");
fclose($fp);

读取文件

$fp = fopen("myfile.txt","r");
while($myvar = fread($fp,4)){
    echo $myvar;
    echo "@";
}
fclose($fp);

复制文件

copy("myfile.txt", "myfile2.txt");

重命名文件

if(file_exists("myfile2.txt")){
rename("myfile2.txt","abc");
}

删除文件

unlink("myfile.txt");

设置权限

chmod("myfile.txt",0777);

filetype()文件类型

switch(filetype("myfile.txt")){
    case "file":
        echo "file";
        break;
    case "fifo":
        echo "命名管道";
        break;
    case "char":
        echo "字符设备";
        break;
    case "dir":
        echo "目录";
        break;
    case "block":
        echo "块设备";
        break;
    case "link":
        echo "指针";
        break;
    default:
        echo "未知类型";
}

filesize()获取文件大小

#大于2GB可能会有问题,系统是32位导致
echo filesize("myfile.txt");

读取文件相关函数

#将整个文件读入到一个数组中,行为元素,返回数组
print_r(file("myfile.txt"));
#将整个文件读入到一个字符串中,返回字符串。
echo file_get_contents("myfile.txt");
echo nl2br("\n");
#读取已经打开的文件,并且可以规定读取几个字符。
echo fread(fopen("myfile.txt","r"),filesize("myfile.txt"));
echo nl2br("\n");
#读取一个字符
$fp = fopen("myfile.txt","r");
while($myvar = fgetc($fp)){
    echo $myvar;
    echo "@";
}
fclose($fp);
echo nl2br("\n");
#读取一行
$fp = fopen("myfile.txt","r");
while($myvar = fgets($fp)){
    echo $myvar;
    echo "@";
}
fclose($fp);
echo nl2br("\n");
#fgetss与fgets一样,但可以过滤掉html和php标记
#将文件读入缓冲区并直接输出,返回大小
echo readfile("myfile.txt");

写入文件相关函数

fwrite(fopen("myfile.txt","w"),"要写入的内容");
file_put_contents("myfile.txt","要写入的内容");

php日期与时间

php日期时间UNIX时间戳

#返回当前unix时间戳(1970年1月1号)
echo time();
#返回指定日期的时间戳
echo mktime($hour = 15, $minute = 42, $second = 40, $month = 12, $day = 25, $year = 2015);

php日期时间格式化

#格式化日期时间
echo date("Y-m-d H:i:s", $timestamp = time());

通过 PHP strtotime() 用字符串来创建日期

$d=strtotime("10:38pm April 15 2015");
echo "创建日期是 " . date("Y-m-d h:i:sa", $d);        
$d=strtotime("tomorrow");
echo date("Y-m-d h:i:sa", $d);
$d=strtotime("next Saturday");
echo date("Y-m-d h:i:sa", $d);
$d=strtotime("+3 Months");
echo date("Y-m-d h:i:sa", $d);

php图形图像

php如何进行图形图像编程

php如何创建画布

header("Content-Type:text/html;charset=utf-8");
header("Content-Type:image/png");
$im = imagecreate(600,200);
$bgcolor = imagecolorallocate($im, 100, 100, 100);
imagepng($im);
imagedestroy($im);

php如何画直线

header("Content-Type:text/html;charset=utf-8");
header("Content-Type:image/jpeg");
$image = imagecreate(600, 200);
$bgcolor = imagecolorallocate($image, 100, 100, 100);
$linecolor = imagecolorallocate($image, 200, 200, 200);
imageline($image, 0, 0, 600, 200, $linecolor);
imagejpeg($image);
imagedestroy($image);

php如何画英文字符串

#bool imagestring(resource image, int font, int x, int y, string s, int col);
#(x,y)左上角坐村,font(1,2,3,4,5为内置字体)
imagestring($image, 5, 0, 0, "Moments", $linecolor);

php如何画中文字符串

#array imagettftext(resource image, float size, float angle, 
#int x, int y, int color, string fontfile, string text);
#image=>图像资源
#size=>字体大小
#angle=>字体角度
#color=>文字的颜色
#fontfile=>字体的文件名称,也可以是远端的文件
#text=>字符串的内容
imagettftext($image, 100, 10, 100, 150, $linecolor, "1.ttf", "Moments");

php获取当前安装的GD库信息

#可以查看到GD所支持的图像格式
var_dump(gd_info());

php获取当前图片的大小信息

$imageresult = getimagesize("1.jpg");
print_r($imageresult);
function getImageType($type){
    $imageTypeArray = array
    (
        0=>'UNKNOWN',
        1=>'GIF',
        2=>'JPEG',
        3=>'PNG',
        4=>'SWF',
        5=>'PSD',
        6=>'BMP',
        7=>'TIFF_II',
        8=>'TIFF_MM',
        9=>'JPC',
        10=>'JP2',
        11=>'JPX',
        12=>'JB2',
        13=>'SWC',
        14=>'IFF',
        15=>'WBMP',
        16=>'XBM',
        17=>'ICO',
        18=>'COUNT'
    );
    if($type>=0 and $type<=18){
        return $imageTypeArray[$type];
    }else{
        return "其他格式...";
    }
}
$myarr = array(
"宽度"=>$imageresult[0],
"高度"=>$imageresult[1],
"类型"=>getImageType($imageresult[2]),
"每种颜色的位数"=>$imageresult['bits'],
"图像的通道值RGB图像默认是3"=>$imageresult['channels'],
"图像的 MIME 信息"=>$imageresult['mime']
);
print_r($myarr);   

读取画布相关大小信息

#读取画布相关大小信息
header("Content-Type:text/html;charset=utf-8");
header("Content-Type:image/png");
$image = imagecreate(600, 200);
$bgcolor = imagecolorallocate($image, 100, 100, 100);
$stringcolor = imagecolorallocate($image, 200, 200, 200);
$myvar = imagesx($image)."*".imagesy($image);
imagestring($image,5,10,10,$myvar,$stringcolor);
imagepng($image);
imagedestroy($image);   

通过字符数据读取图片信息

#通过字符数据读取图片信息    
$data = file_get_contents("1.jpg");
print_r(getimagesizefromstring($data));  

php创建并保存图片

// 创建图像实例
$im = imagecreatetruecolor(100, 100);
// 保存图像
imagepng($im, './test' . image_type_to_extension(IMAGETYPE_PNG));
imagedestroy($im);    
#创建图像然后保存    
header("Content-Type:text/html;charset=utf-8");
header("Content-Type:image/png");
$image = imagecreate(600, 200);
$bgcolor = imagecolorallocate($image, 100, 100, 100);
$stringcolor = imagecolorallocate($image, 200, 200, 200);
$myvar = imagesx($image)."*".imagesy($image);
imagestring($image, 5, 10, 10, $myvar, $stringcolor);
imagepng($image, "2".image_type_to_extension(IMAGETYPE_PNG));
imagedestroy($image);    

php画圆

// 创建一个 200X200 的图像
$image = imagecreate(200, 200);
$image = imagecreatetruecolor(200, 200);
// 分配颜色
$bgcolor = imagecolorallocate($image, 100, 100, 100);
$frontcolor = imagecolorallocate($image, 200, 200, 200);
//刷背景
imagefill($image, 0, 0, $bgcolor); //imagecreatetruecolor
// 画一个黑色的圆
#75*75为圆心,150*150椭圆的宽度和高度,0*360为角度
imagearc($image, 75, 75, 150, 150, -90, 180, $frontcolor);
// 将图像输出到浏览器
header("Content-type: image/png");
imagepng($image);
// 释放内存
imagedestroy($image);
#用imagecreatetruecolor(int x,int y)建立的是一幅大小为 x和 y的黑色图像(默认为黑色),
#如想改变背景颜色则需要用填充颜色函数imagefill($img,0,0,$color);
#imagecreate 新建一个空白图像资源,用imagecolorAllocate()添加背景色

php画直线

imageline($image, 0, -50, imagesx($image), imagesy($image), $linecolor);

php画虚线

#创建画布
$image = imagecreate(600, 200);
#分配背景颜色
$bgcolor = imagecolorallocate($image, 100, 100, 100);
$linecolor = imagecolorallocate($image, 200, 200, 200);
#画对角线
imageline($image, 0, 0, imagesx($image), imagesy($image), $linecolor);
#画虚线
$r = imagecolorallocate($image, 255, 0, 0);
$g = imagecolorallocate($image, 0, 255, 0);
$style = array($r, $r, $r, $r, $r, $r, $g, $g, $g);
imagesetstyle($image, $style);
imageline($image, 0, -50, imagesx($image), imagesy($image), IMG_COLOR_STYLED);
#使用画刷
$brush = imagecreatefrompng("http://www.libpng.org/pub/png/images/smile.happy.png");
imagesetbrush($image, $brush);
imageline($image, 0, -50, 50, 100, IMG_COLOR_STYLEDBRUSHED);
#将图像输出到浏览器
header("Content-Type:image/jpeg");
imagejpeg($image);

php图像复制位置对齐模式

#文件路径
$filename = "1.jpg";
$x_percent = 1;
$y_percent = 1;
$dst_image = imagecreatetruecolor(700, 240);
$src_image = imagecreatefromjpeg($filename);
$dst_x = 0;
$dst_y = 0;
$src_x = 0;
$src_y = 0;
$dst_w = imagesx($dst_image);
$dst_h = imagesy($dst_image);
$src_w = imagesx($src_image) - $src_x;
$src_h = imagesy($src_image) - $src_y;
#图片对齐模式
$flag = "垂直水平居中";
switch($flag){
    case "垂直水平居中":
        $src_x = ($src_w - $dst_w)/2;
        $src_y = ($src_h - $dst_h)/2;
        $src_w = $src_w/($src_w/$dst_w);
        $src_h = $src_h/($src_h/$dst_h);
        break;
    case "垂直居中":
        $src_y = ($src_h - $dst_h)/2;
        $src_h_old = $src_h;
        $src_h -= $src_y*2;
        $src_w = $src_w/($src_w/$dst_w);
        break;
    case "水平居中":
        $src_x = ($src_w - $dst_w)/2;
        $src_w_old = $src_w;
        $src_w -= $src_x*2;
        $src_h = $src_h/($src_h/$dst_h);
        break;
    default:
        break;
}
#图像复制
imagecopyresized($dst_image, $src_image, $dst_x, $dst_y, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h);
#将图像输出到浏览器
header("Content-Type:image/jpeg");
imagejpeg($dst_image);
#释放内存
imagedestroy($dst_image); 

php处理XML

php使用simplexml操作xml实例

header("Content-Type:text/html;charset=utf-8");

$myvar = <<<XML
<?xml version="1.0" encoding="utf-8"?>
<nodes>
    <node>
        <title type="1">First</title>
        <price>100</price>
    </node>
    <node>
        <title type="2">Second</title>
        <price>200</price>
    </node>
</nodes>
XML;

$myxml = simplexml_load_string($myvar);
echo "父结点名称:".$myxml->getName();
echo nl2br("\n");
echo "子结点个数:".$myxml->count();
echo nl2br("\n");

foreach($myxml->children() as $node){
    #print_r($node);
    echo nl2br("\n");
    echo "[title]->".$node->title;
    echo nl2br("\n");
    echo "[price]->".$node->price; //读取节点
    echo nl2br("\n");
    echo "[title]->type->".$node->title->attributes()->type; //读取属性
    $node->title->attributes()->type = "Moments"; //修改元素

    foreach($node->children() as $node_2){
        if($node_2->getName() == "title"){
            echo nl2br("\n");
            echo "[node_2]->type->".$node_2->attributes()->type;
        }
    }

    $myxml->asXML("myxml.xml"); //保存xml文档
}

切面编程

class A
{
    protected static $name = 'A类';

    static function display()
    {
        echo ' static::$name => '.static::$name;
        echo ' self::$name => '.self::$name.PHP_EOL;
    }

    function getClosure()
    {
        return function () {
            echo ' static::$name => '.static::$name;
            echo ' self::$name => '.self::$name.PHP_EOL;
        };
    }
}

class B
{
    protected static $name = 'B类';
}

class C extends A
{
    protected static $name = 'C类';
}

class D extends B
{
    protected static $name = 'D类';
}

$a = new A();
$b = new B();
$c = new C();
$d = new D();

// 后期静态绑定
$a::display();
$c::display();

// 由于$b没有display方法,可以使用切面注入进去
$aop = function () {
    echo ' static::$name => '.static::$name;
    echo ' self::$name => '.self::$name.PHP_EOL;
};
$aop->call($b);

// 将其他类的方法切入进去,这种切法只是函数封装
$aop = function ($c) {
    echo ' 先执行的类 => '.static::$name;
    $c->display();
};
$aop->call($b, $c);

// 把一个类的方法切到另一个类中,这种就有点意思了,被切入的类无需改动
$c->getClosure()->call($b);
// $c->getClosure()->bindTo($b, $b)(); // newscope参数传类名'B'或都实例$b,开启受保护的属性可以访问

// newscope这个作用域还可以指定为父类,所以self::$name为B类
$c->getClosure()->bindTo($d, $b)(); // newscope参数传类名'B'或都实例$b,开启受保护的属性可以访问

 static::$name => Aself::$name => Astatic::$name => Cself::$name => Astatic::$name => Bself::$name => B类
 先执行的类 => Bstatic::$name => Cself::$name => Astatic::$name => Bself::$name => Bstatic::$name => Dself::$name => B
上次编辑于:
贡献者: Moments