分类目录归档:PHP

thinkphp5的crud基本操作理解

thinkphp的参数绑定:
Db::execute(‘insert into think_data (id, name ,status) values (?, ?, ?)’, [8, ‘thinkphp’, 1]);

thinkphp的占位符绑定:
Db::execute(‘insert into think_data (id, name , status) values (:id, :name, :status)’, [‘id’ => 10, ‘name’ => ‘thinkphp’, ‘status’ => 1]);

$result = Db::query(‘select * from think_data where id=:id’, [‘id’ => 10]);
dump($result);

thinkphp的查询构造器:
Db::table()和Db::name(),一个是完整的表名,一个是表前缀
$list = Db::name(‘data’)->where(‘id’,5)->select();

db助手函数默认会每次重新连接数据库,因此应当尽量避免多次调用。
$db = db(‘data’);
$db->insert([‘id’ => 3, ‘name’ => ‘thinkphp’]);
$list = $db->where(‘id’,20)->select();

链式操作做复杂查询:
$list = Db::name(‘data’)->where(‘status’,1)->field(‘id,name’)->order(‘id’,’desc’)->limit(10)->select();
dump($list);

thinkphp5中的pathinfo解析,nginx说明

nginx用正则拆分uri,官方的说明,很清楚!!!
thinkphp5必备!!!

Syntax: fastcgi_split_path_info regex;
Default: —
Context: location
Defines a regular expression that captures a value for the $fastcgi_path_info variable. The regular expression should have two captures: the first becomes a value of the $fastcgi_script_name variable, the second becomes a value of the $fastcgi_path_info variable. For example, with these settings

location ~ ^(.+\.php)(.*)$ {
fastcgi_split_path_info ^(.+\.php)(.*)$;
fastcgi_param SCRIPT_FILENAME /path/to/php$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;

and the “/show.php/article/0001” request, the SCRIPT_FILENAME parameter will be equal to “/path/to/php/show.php”, and the PATH_INFO parameter will be equal to “/article/0001”.

模板文件中用的多,如page.tpl.php

流程控制的替代语法

(PHP 4, PHP 5, PHP 7)

PHP 提供了一些流程控制的替代语法,包括 ifwhileforforeachswitch。替代语法的基本形式是把左花括号({)换成冒号(:),把右花括号(})分别换成 endif;endwhile;endfor;endforeach; 以及 endswitch;

<?php if ($a == 5): ?>
A is equal to 5
<?php endif; ?>

在上面的例子中,HTML 内容“A is equal to 5”用替代语法嵌套在 if 语句中。该 HTML 的内容仅在 $a 等于 5 时显示。

__METHOD__,__FUNCTION__

本文实例讲述了PHP中魔术变量__METHOD__与__FUNCTION__的区别,分享给大家供大家参考。具体分析如下:
__METHOD__类的方法名(PHP 5.0.0 新加)。返回该方法被定义时的名字(区分大小写)。
__FUNCTION__函数名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该函数被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。
文档解释都是说返回函数(方法)的名字。区别在于:
__FUNCTION__只是返回方法的名字;

__METHOD__返回类的名字和方法的名字。

<?php
      class Test{
        public function doit(){
          echo __FUNCTION__;
        }
        public function doitAgain(){
          echo __METHOD__;
        }
      }
      $obj = new Test();
      $obj->doit();
      echo '<br>';
      $obj->doitAgain();
?>

输出结果为:
doit
Test::doitAgain

 

php的echo输出字符串中的逗号

当使用 echo进行字符串输出时,如果字符串使用拼接方式组成,可以使用逗号来连接需要拼接的各部分字符串和变量,比如

echo ‘first’,”second”,$str,”end”;

据说这样输出速度要快一些,原因在于echo可以接受多个参数,并直接按顺序输出,实际上逗号不是拼接字符串,而是把不同字符串和变量作为参数传送给echo命令。

php的final类和final方法,final类不可被继承,final方法不可被重写,mark

final—用于类、方法前。
final类—不可被继承。
final方法—不可被覆盖。
final类不能被继承。
如果我们不希望一个类被继承,我们使用final来修饰这个类。这个类将无法被继承。比如我们设定的Math类,涉及了我们要做的数学计算方法,这些算法也没有必要修改,也没有必要被继承,我们把它设置成final类型。

php use 使用

原链接:http://www.chrisyue.com/php-namespace-and-use.html#comment-4039

namespace(后面简称ns)还蛮好懂的,在定义了一个ns之后,下面所申明的class, interface, const(不包含variable哦亲~)都是在申明的ns这个“域”里面的。当引用一个申明了ns的包含文件,想要调用这个ns里面的东西,那必须调整当前脚本也到此ns域,否则就得用全称(包含ns全称):

继续阅读

php的curl参数returntransfer的理解

简单说,RETURNTRANSFER参数设定后,会把所获取的内容存放在一个变量中,通过echo $value来呈现在页面上,否则直接存在内存中,如果不加,或者设置为false此选项,,则会直接打印出所请求的页面。。。。。

网上说的文件流什么的,对我这个菜鸟来说,太高深。

base auth

nonce:在摘要认证中服务器让客户选一个随机数(称作”nonce“),然后浏览器使用一个单向的加密函数生成一个消息摘要(message digest),该摘要是关于用户名、密码、给定的nonce值、HTTP方法,以及所请求的URL。
algorithm:算法,如algorithm=MD5
qop是认证的(校验)方式

WWW-Authenticate是httpd的一个标头
realm的值是一个简单的字符串,而rfc2617上写的是一个email类型的字符串,我看这个没有必要意义,所以我就也简单地写了个email形式的字符串
qop是认证的(校验)方式,这个比较重要,对后面md5的加密过程有影响,值就按照上面的那样写就行了
nonce的值也是一个字符串,如果不严格,可以随机生成一个就行,注意它是个GUID,即唯一的、不重复的。如果严格,则需要包含时间信息、客户端IP信息和其它信息,因为认证过程的时间很短,所以如果服务器收到认证信息后发现这个时间和服务器的时间相去甚远,那说明不正常,直接拒绝,以防止攻击,还有客户端IP,如果这个IP一直这样攻击,则可以在一定时间内发现是该IP的连接则直接断掉。这些严格的做法主要是为了防止攻击。在rfc2617上有狭路为详细的描述。我这里没有考虑这些,只是使用了个简单的字符串
opaque是个字符串,它只是透传而已,即客户端还会原样返回过来。实际上,上面的那些域,客户端都还是会原样返回的,但返回时除了以上的那些域之外,还会增加新的内容进来。