yiven吧 关注:4贴子:101
  • 7回复贴,共1

学习笔记PHP

只看楼主收藏回复

PHP中,变量名称只能包含字母数字字符和下划线(A-z、0-9 以及 _),但不能以数字卡头
所有用户定义的函数、类和关键词(例如 if、else、echo 等等)都对大小写不敏感;不过在 PHP 中,所有变量都对大小写敏感。
比如:echo=Echo=EcHo=ECHO;
mytest()=myTest;
$a!=$A
PHP 有三种不同的变量作用域:
local(局部)函数内部申明的变量只能在函数内部使用,不同的函数可以使用相同的变量
global(全局)函数外部申明的变量,只能在函数外部使用
static(静态)保留变量值
举例
<?php
$x=5; // 全局作用域
function myTest() {
$y=10; // 局部作用域
echo "<p>测试函数内部的变量:</p>";
echo "变量 x 是:$x";
echo "<br>";
echo "变量 y 是:$x";
}
//变量x是全局变量,函数内部无法使用,所以执行mytest函数无法输出x的值
myTest();//执行函数myTest
//变量x是局部变量,函数外部无法使用,所以执行mytest函数无法输出y的值
echo "<p>测试函数之外的变量:</p>";
echo "变量 x 是:$x";
echo "<br>";
echo "变量 y 是:$x";
?>
function myTest() {
global $x,$y;//global关键字使得函数内部也可以使用全局变量
$y=$x+$y;
}
myTest();
echo $y; // 输出 15
//上面的代码也可以这样写
function myTest1() {
$GLOBALS['y']=$GLOBALS['x']+$GLOBALS['y'];
}
myTest1();
echo $y; // 输出 15
?>
<?php
function myTest() {
static $x=0;//static关键字将使得变量x的值被保留
echo $x;
$x++;
}
myTest();//输出0
myTest();//输出1
myTest();//输出2
myTest();//输出3
?>


IP属地:四川1楼2014-07-21 18:01回复
    a:link、a:visited、a:hover、a:active
    四种伪类的放置顺序,必须为以上从左至右
    参考资料:http://www.cnblogs.com/xiaochaohuashengmi/archive/2010/09/06/1819624.html


    IP属地:四川2楼2014-09-17 18:13
    回复
      2025-07-14 21:36:26
      广告
      正则表达式:(\w+\@\w+.\w+)|(ht|f)tp[s]://[^ ,\n\l\r]*|(\w+\.\w+\.\w+[^ ,\n\r]*)
      匹配对象:任意超级链接(包括网址以及邮件地址)


      IP属地:四川3楼2014-09-22 16:43
      收起回复
        图片的居中,系统的官方处理图片居中,居左,居右的css写法,分享一下!
        比如一个图片的<img class=”alignleft “>,
        一般设置图片属性text-align:centre水平居中,但这个方法经常无效,以后还是采用以下写法吧!
        /* Alignment */
        /* 居左,设置图片的img属性左浮动;*/
        .alignleft {
        display: inline;
        float: left;
        }
        /* 居右,设置右浮动;*/
        .alignright {
        display: inline;
        float: right;
        }
        /*水平居中,设置margin:auto*/
        .aligncenter {
        clear: both;
        display: block;
        margin:auto;
        }


        IP属地:四川4楼2015-06-16 16:40
        回复
          今天才知道,原来a标签里面嵌套input是不符合标准的,所以不能这么做,
          应该直接把a标签写成按钮的样式,把a标签设置为inline-block就可以了。
          a标签中如果有button, 那么在IE下就不能跳转到herf的链接。而火狐和google中可以
          如下:此种在IE中不可以。这边的class中的属性只用于按钮样式。
          <a href="jsp/manage/manage-context.jsp"><input type="button" class="searchbut" value="返 回"></a>
          而通过这样在IE中可行。但在火狐和google中则不可以
          <input type="button" onclick="window.location.href('/jsp/manage/manage-context.jsp')" class="searchbut" value="返 回">
          下面这种则在IE,火狐,google中都可以
          <input type="button" onclick="window.location.href='/jsp/manage/manage-context.jsp'" class="searchbut" value="返 回">

          通过open方法,还可以设置打开页面的方式,如window.open(''index.html',_blank');

          IE6/IE7下对display:inline-block的支持性不好。1、inline元素的display属性设置为inline-block时,所有的浏览器都支持;2、block元素的display属性设置为inline-block时,IE6/IE7浏览器是不支持的; 对象呈递为内联对象,但是对象的内容作为块对象呈递。旁边的内联对象会被呈递在同一行,允许空格。(准确地说,应用此特性的元素现为内联对象,周围元素保持在同一行,但可以设置宽度和高度等块元素的属性) IE中对内联元素使用display:inline-block,IE是不识别的,但使用display:inline-block在IE下会触发 layout,从而使内联元素拥有了display:inline-block属性的表征。从上面的这个分析,也不难理解为什么IE下,对块元素设置 display:inline-block属性无法实现inline-block的效果。这时块元素仅仅是被display:inline-block触 发了layout,而它本身就是行布局,所以触发后,块元素依然还是行布局,而不会如Opera中块元素呈递为内联对象。 IE6下块元素如何实现display:inline-block的效果?
          有两种方法:
          1、 先使用display:inline-block属性触发块元素,然后再定义display:inline,让块元素呈递为内联对象(两个display 要先后放在两个CSS声明中才有效果,这是IE的一个经典bug,如果先定义了display:inline-block,然后再将display设回 inline或block,layout不会消失)。代码如下(...为省略的其他属性内容):
          div {display:inline-block;...}
          div {display:inline;}
          2、直接让块元素设置为内联对象呈递(设置属性display:inline),然后触发块元素的layout(如:zoom:1 或float属性等)。代码如下:
          div { display:inline-block; _zoom:1;_display:inline;} /*推荐*/
          div { display:inline-block; _zoom:1;*display:inline;} /*推荐:IE67*/
          有 4 个保留的目标名称用作特殊的文档重定向操作:
          _blank 浏览器总在一个新打开、未命名的窗口中载入目标文档。 _self 这个目标的值对所有没有指定目标的 <a> 标签是默认目标,它使得目标文档载入并显示在相同的框架或者窗口中作为源文档。这个目标是多余且不必要的,除非和文档标题 <base> 标签中的 target 属性一起使用。 _parent 这个目标使得文档载入父窗口或者包含来超链接引用的框架的框架集。如果这个引用是在窗口或者在顶级框架中,那么它与目标 _self 等效。 _top 这个目标使得文档载入包含这个超链接的窗口,用 _top 目标将会清除所有被包含的框架并将文档载入整个浏览器窗口。


          IP属地:四川5楼2016-11-02 15:29
          回复
            <?php
            $a = session_id();
            if(empty($a)) session_start();
            echo "SID: ".SID."<br>session_id(): ".session_id()."<br>COOKIE: ".$_COOKIE["PHPSESSID"];
            ?>
            彻底弄清楚session是什么?
            首先,我大致的知道,session是一次浏览器和服务器的交互的会话,会话是啥呢?就是我问候你好吗?你回恩很好。就是一次会话,那么对话完成后,这次会话就结束了,还有我也知道,我们可以将一个变量存入全部的$_SESSION['name']中,这样PHP的各个页面和逻辑都能访问到,所以很轻松的用来判断是否登陆。
            这是我之前理解的session,当然也是对的,只是解释的太肤浅,理解的太表面了,面试官如果听到这样的答案其实是不太满意的。我参考了其他的很多资料,彻底理解清楚session。
            在说session是啥之前,我们先来说说为什么会出现session会话,它出现的机理是什么?我们知道,我们用浏览器打开一个网页,用到的是HTTP协议,学过计算机的应该都知道这个协议,它是无状态的,什么是无状态呢?就是说这一次请求和上一次请求是没有任何关系的,互不认识的,没有关联的。但是这种无状态的的好处是快速。
            所以就会带来一个问题就是,我希望几个请求的页面要有关联,比如:我在http://www.a.com/login.php里面登陆了,我在http://www.a.com/index.php 也希望是登陆状态,但是,这是2个不同的页面,也就是2个不同的HTTP请求,这2个HTTP请求是无状态的,也就是无关联的,所以无法单纯的在index.php中读取到它在login.php中已经登陆了!
            那咋搞呢?我不可能这2个页面我都去登陆一遍吧。或者用笨方法这2个页面都去查询数据库,如果有登陆状态,就判断是登陆的了。这种查询数据库的方案虽然可行,但是每次都要去查询数据库不是个事,会造成数据库的压力。
            所以正是这种诉求,这个时候,一个新的客户端存储数据方式出现了:cookie。cookie是把少量的信息存储在用户自己的电脑上,它在一个域名下是一个全局的,只要设置它的存储路径在域名http://www.a.com下 ,那么当用户用浏览器访问时,php就可以从这个域名的任意页面读取cookie中的信息。所以就很好的解决了我在http://www.a.com/login.php页面登陆了,我也可以在http://www.a.com/index.php获取到这个登陆信息了。同时又不用反复去查询数据库。
            虽然这种方案很不错,也很快速方便,但是由于cookie 是存在用户端,而且它本身存储的尺寸大小也有限,最关键是用户可以是可见的,并可以随意的修改,很不安全。那如何又要安全,又可以方便的全局读取信息呢?于是,这个时候,一种新的存储会话机制:session 诞生了。
            我擦,终于把session是怎么诞生的给圆清楚了,不容易啊!!!
            好,session 诞生了,从上面的描述来讲,它就是在一次会话中解决2次HTTP的请求的关联,让它们产生联系,让2两个页面都能读取到找个这个全局的session信息。session信息存在于服务器端,所以也就很好的解决了安全问题。
            session的运行机制和是怎么保存的?
            既然,它也是一种服务区存储数据的方式,肯定也是存在服务器的某个地方了。确实,它存在服务器的/tmp 目录下,这一点我们接下来慢慢讲。
            我们先说下它的运行机制,是怎么分配的。我们主要用PHP中session的机制,其实各种语言都差不多。
            如果这个时候,我们需要用到session,那我们第一步怎么办呢?第一步是开启session:
            session_start();
            这是个无任何返回值的函数,既不会报错,也不会成功。它的作用是开启session,并随机生成一个唯一的32位的session_id,类似于这样:
            4c83638b3b0dbf65583181c2f89168ec
            session的全部机制也是基于这个session_id,它用来区分哪几次请求是一个人发出的。为什么要这样呢?因为HTTP是无状态无关联的,一个页面可能会被成百上千人访问,而且每个人的用户名是不一样的,那么服务器如何区分这次是小王访问的,那次是小名访问的呢?所以就有了找个唯一的session_id 来绑定一个用户。一个用户在一次会话上就是一个session_id,这样成千上万的人访问,服务器也能区分到底是谁在访问了。


            6楼2017-08-24 13:58
            回复