<?php ?>
内。 这样apache才会把他当作php脚本内容来解析, 才会去调用php模块解析,而后返回解析后的内容,由于不管是php仍是html文件扩展名,都是由apache来接受请求并解析的,都是按html代码来处理的,只是在遇到php标签的时候,才认为是php脚本代码。也就说,在写web的时候, 老是先有 标签, 后有 内容! 应该将内容都放在标签中,而不是直接将 内容放在文件中。php
1.php的全局变量是 针对一个文件内部, 一个文件域而言的。
凡是在函数外部的变量都叫作 全局变量
跟c/c++的全局变量思惟不同,php认为函数内外的变量是 两个互不想通, 互不可见的(函数内的变量是局部变量)。即全局变量不能在 函数内使用。 确实要在函数内部使用全局变量,就要使用 global语句,或者叫global 关键字声明。html
<?php $name = 'jack'; function getName(){ global $name; echo $name; } getName(); ?>
php的变量声明?
能够不用声明变量,直接使用;
但跟其余编程语言的思想相相似, 变量应该、最好是先声明再使用;
可是要注意的是, 全局变量的声明不能使用var, 而类定义中的 成员变量声明时应该使用 var关键字!
声明的时候, 你能够只写这个变量,但这样在形式上,和实际做用上意义都不大, 因此, 应该将变量的声明和初始化相结合,这样既声明了变量,同时又给变量初始化,赋了初值。java
unexpected T_VAR in c:\foo.php on lin2, 其中T_VAR表示 terminate variable, 表示意外的 变量结尾,实际上就是变量的声明错误mysql
变量声明错误是parse ERROR, 而变量undefined variable未声明是notice! 警告linux
<?php $GLOBALS['name'] = 'JACK'; function getName(){ echo $GLOBALS['name']; } getName(); ?>
所谓的全局变量,实际上也只是 “文件域”的,只是在当前文件范围内有效。
一个文件要使用另外一个文件中的 所谓的 “全局变量”,要使用 include...c++
在php标签中,能够包含其余php文件, 在使用包含include/require/_once 的时候,实际上是作了一些处理、工做的: 先将被包含文件的php标签先去掉/剥离,
而后只是将其中的php标签中的内容包含、复制过来。
因此, 若是在php标签中, 你就不能直接地再次使用,php的标签了,也就是说, php标签是不能嵌套的. 不然就会出错,如: <?php <?php ....?> .... ?>
web
可是php的包含include语句,跟c/c++的又有所区别: 被包含的php文件,必定要写 php标签, 不然你觉得像c语言同样,直接复制过来的.可是在php中, 若是被包含文件没有php标签的时候, 只是把其中的内容当作"纯粹的/原生的html内容来输出,好比: $foo=10;
只会直接在浏览器中 输出$foo=10;
而并不会认为是一个php变量$foo
, 因此后面使用 echo $foo;
的时候, 就会报错: Notice: Undefined variable: foo
正则表达式
echo $GLOBALS; 的输出结果: Array( .... [SCRIPT_FILENAME] => C:/wamp/www/foo.php [REMOTE_PORT] => 49275 [GATEWAY_INTERFACE] => CGI/1.1 [SERVER_PROTOCOL] => HTTP/1.1 [REQUEST_METHOD] => GET [QUERY_STRING] => [REQUEST_URI] => /foo.php [SCRIPT_NAME] => /foo.php [PHP_SELF] => /foo.php [REQUEST_TIME] => 1507607647 ) **[name] => JACK** )
foo.php文件内容: <?php $GLOBALS['age'] = 10; print_r($GLOBALS); // 只是包含 系统超全局变量 和一个 age index变量 ?>
bar.php文件内容 <?php $GLOBALS['name'] = 'JACK'; function getName(){ echo $GLOBALS['name']; } getName(); echo "<br>"; print_r($GLOBALS); // 执行完foo.php后, 再执行bar.php, 这时显示的仍然只有系统超全局变量 和 name 索引变量, 并无 age索引... ?>
结论:sql
php脚本是解释型,不是编译型, 并不能像c语言那样, 一个全局变量执行完后, 仍存在于内存中, 确实是全部文件均可以共用的全局变量 , 可是在php中, 脚本是"无状态的"! 即: 一个脚本文件执行完毕后 , 关于这个脚本的 全部的内存变量都要被清除, 抹掉, 服务器端(php语言)不会保持 这个被请求的php脚本的执行后的任何内容. 当下一次请求其余php脚本的时候, 全部的一切 内存变量都要 从新开始, "一切又要从头开始" 好像之前的任何脚本都没有执行过.数据库
所以 不一样脚本文件中的 $GLBOALS是变化的, 执行每一个不一样的脚本,其值多是不一样的! 文件与文件之间的 $GLBOALS 不是互相传递的.
或者说: php是不保存状态的, 一个php脚本中的变量 跟另外一个 脚本中的 同名 变量是 没有毛关系的. 彼此老死不相往来,除非 include...
在php中,单是一个$foo;是没有任何意义的, 并无定义、声明这个变量: 这个foo变量会被认为是 null, 会被认为是not set,同时会被
认为是undefined. 是没有被定义的.
变量为null 只有两种状况: 一是$foo;
二是 $foo = null;
即没有任何定义,或直接明确赋值为null
对于defined和undefined判断,凡是null,都是认为 没有定义的.
总之, 只有两种状况下是null
<?php $name; // 像这样的语句实际上是没有任何意义的,固然也不会认为是错误的 if(defined($name)){echo '$name is defined';}else{ echo '$name is undefined';} if(is_null($name)){ echo "name is null"; }else{ echo "name is not null"; } echo "<br>---------------------------------<br>"; $name = null; if(defined($name)){echo '$name is defined';}else{ echo '$name is undefined';} echo "<br>"; if(is_null($name)){ echo "name is null"; }else{ echo "name is not null"; } echo "<br>---------------------------------<br>"; if(isset($age)){ echo "age is set"; }else{ echo "age is not set"; } echo "<br>---------------------------------<br>"; if(empty($name)){ echo 'name is empty';}else{echo 'name is not empty';} echo "<br>---------------------------------<br>"; $name=''; // 这里name被赋予空字符,但已经不是null了, 也就是说,只有给变量赋值, 变量就不为null if(is_null($name)){ echo "name is null"; }else{ echo "name is not null"; } ?>
超全局变量$_GLOBLAS也是文件域的
当一个文件结束时, 全部有关这个文件的东西都将在内存中消失.
get/post的内容是如何传递到 "跳转"文档中的?
可能有两种可能:
一种是: 跳转时, 原文档自己并是立刻关闭, 要将传递的内容传递 到 目标页面后(即在交际的时间点, 是有两个文档 在内存中同时并存被打开的, 即A -> B , 那么A和B 都打开并同时生存), 原文档才关闭.
另外一种多是: 源文档中的传递变量/参数, 由apache来管理, 将它发到一个临时内存变量区中, 随即关闭原文档, 而后再打开 跳转的目标文档, 而后把保存的 变量合并到目标文档中.
两种方式, 均可实现, 可是反正都是单文件做用域的
php和html: 一切都是标签 的 标签文档
因为php和html都是在服务器端执行的“脚本”不是在os下执行的C/c++程序,因此它是面向的apache,因此是标签文档,“一切都是标签”:严格来讲,文档中只有标签. 全部的内容都要用标签来进行"语义化"说明. 那种随便"甩东西在文档中"的写法实际上是没有理解标签文档的含义的
在php中, 要计算"数字字符串"的数值时, 不要使用toint()函数 ,应该使用intval()函数.由于这个函数会作一些安全性处理.
当判断一个变量是否为数字,不然进行赋值时的 "通用写法"是:
if( isset($_GET['id']) && !empty($_GET['id']) )
由于浏览器会把多个空格(包括制表符)当作一个 空格来显示,因此:
在代码中 不必定老是用 回车、换行来分割显示, 使用空格也能够的。
APR是什么?
APR是apache portalbe runtime (library) 可移植运行库, 是从apache项目中分离出来的,(之前的apache是本身在内部, 来实现对操做系统调用的实现, 如今就不是本身直接实现了, 而是apache内部组件 经过 APR (至关于中间件) 来对操做系统资源的调用了 )将不一样操做系统平台如win, unix, linux等平台下的系统调用进行封装.便于移植, 同时也减轻了apache的重量.
pcre: perl compatible regular expression: perl 兼容正则表达式. 由于apache在处理一些应用/模块如 rewrite.so重写模块的时候,可能就要用到这个pcre.因此手动安装时可能也要求安装pcre.
<?php $a=10; // 整数, 包括十进制/ 十六进制的0x表示的, 八进制的 0123 表示的. 都算. $b=10.2e3; // 只要是用 指数形式或科学计数法表示的都是 浮点数: float/double/real $c=11.0; $d='123'; $e=11.2; var_dump($a); var_dump($b); var_dump($c); var_dump($d); var_dump($e); echo gettype($a)."<br>"; echo gettype($b)."<br>"; echo gettype($c)."<br>"; echo gettype($d)."<br>"; echo is_numeric($a)?"\t数字":"非数字\t"; echo is_numeric($b)?"\t数字":"非数字"; echo is_numeric($c)?"\t数字":"非数字\t"; echo is_numeric($d)?"\t数字":"非数字\t"; settype($a,"double"); echo "<br>".$a; echo "<br>".gettype($a)."<br>"; ?>
上述代码显示的结果:
int 10 float 10200 float 11 string '123' (length=3) float 11.2 integer double double string 数字 数字 数字 数字 10 double
结论:
php中的数据类型, 包括8种“正式”的, 3种“伪类”的
4种基本、标量类型: 整数,浮点数,布尔值,字符串
2种复合类型: 数组, 对象
2种特殊类型: 资源resource, NULL空
为了便于理解函数 的参数类型, 规定了3种伪类: mixed,numeric, call_user_function
关于php中的数字?
所以,数字实际上是一种 "伪类",叫number, 包括: int, float, 数字字符串"123"等.即上面的$a/b/c/d判断是否为数字时,都显示为true!
判断变量类型的函数有: is_numeric, is_string, is_bool, is_array, is_object, is_resource.注意的是, "123"这样的数字字符串, 便是数字, 又是字符串的类型...
在显示echo, 或var_dump的时候,即便是浮点数(有小数点)的,只要小数点后面是0,仍然会将小数点后面的部分去掉只显示前面的整数部分, 好比: 10.0,12.00都只显示为10, 12
1.(print 和 print_r能够显示简单变量,可是只是显示值, 不会显示显示 “数据类型”!) var_dump和gettype显示的类型略有区别, 前者能够认为是“简单”显示, 后者是“完整”显示,好比: 整数,前者显示为int, 后者显示为interger; 浮点数前者显示为 :float,后者显示为double. 字符串都显示为string.
并且字符串 var_dump还会显示长度(length=x)
因此, 对于php来讲, 由于是弱类型语言,因此在定义变量时, 并不须要声明变量类型, 甚至, 同一个变量$a, 还能够赋予不一样类型的值, 如$a=10, 后面还能够$a="abc". 都是能够的! 所以,不须要用int/integer之类的关键字来讲明。因此 对于php变量的类型“名称、字符串”,只是咱们使用的“人”的一种称呼, php代码自己其实并不关心“什么称呼”的! 或者说 根本就没有这种说法或问题存在。
甚至说, 某个变量是整数, 能够说是: int, integer, 你若是高兴,也能够说他是: inti, inte, integ, integering均可以???只要你的代码中的数据类型在运算时是正确合适的就行。
因此, 能够说: php中的int 跟 integer没有区别,相等的; 一样的float,double, real都认为是相等的,一回事!
是否作类型检查?
php代码尧转换为c代码吗? 为何有 function {main}()?
10<pre class='xdebug-var-dump' dir='ltr'><small>int</small> <font color='#4e9a06'>10</font> </pre><pre class='xdebug-var-dump' dir='ltr'><small>float</small> <font color='#f57900'>10200</font> </pre><pre class='xdebug-var-dump' dir='ltr'><small>float</small> <font color='#f57900'>11</font> </pre><pre class='xdebug-var-dump' dir='ltr'><small>string</small> <font color='#cc0000'>'123'</font> <i>(length=3)</i> </pre><pre class='xdebug-var-dump' dir='ltr'><small>float</small> <font color='#f57900'>11.2</font> </pre>integer<br>double<br>double<br>string<br> 数字 数字 数字 数字<br>10<br>double<br><br /> <font size='1'> <table class='xdebug-error' dir='ltr' border='1' cellspacing='0' cellpadding='1'> <tr><th align='left' bgcolor='#f57900' colspan="5"><span style='background-color: #cc0000; color: #fce94f; font-size: x-large;'>( ! )</span> Fatal error: Unsupported operand types in C:\wamp\www\index.php on line <i>30</i></th></tr> <tr><th align='left' bgcolor='#e9b96e' colspan='5'>Call Stack</th></tr> <tr><th align='center' bgcolor='#eeeeec'>#</th><th align='left' bgcolor='#eeeeec'>Time</th><th align='left' bgcolor='#eeeeec'>Memory</th><th align='left' bgcolor='#eeeeec'>Function</th><th align='left' bgcolor='#eeeeec'>Location</th></tr> <tr><td bgcolor='#eeeeec' align='center'>1</td><td bgcolor='#eeeeec' align='center'>0.0004</td><td bgcolor='#eeeeec' align='right'>375752</td><td bgcolor='#eeeeec'>{main}( )</td><td title='C:\wamp\www\index.php' bgcolor='#eeeeec'>..\index.php<b>:</b>0</td></tr> </table> </font>
echo能够输出任意内容:除了html代码外,还能够输出 对浏览器端 的 script的js脚本内容:
好比:echo "<script>alert(\"请先登陆再进行操做\"); window.open('/', '_top'); </script>";
在双引号中, 能够嵌套单引号,若是确实要嵌套双引号, 可使用 \进行转义。
isset能够带多个参数: if(!isset($_SESSION["uid"],$_SESSION["username"]))
?
isset: 其中的set表示设置的意思,就是判断一个变量是否已经设置,并且是否为null
若是一个变量被unset,确定就是isset为false了。
注意变量被设置为"",实际上是被设置为 \0,可是他就不是null了.
isset能够带多个 参数, 此时,只有 这些全部的参数 都被设置且不为null, 才返回true. 不然返回false. 参数是从左到右进行检查,遇到错误false立刻中止检查
平时 多读 多记 别人的代码, 框架代码, 就是增加本身的内功的过程。 要把整个代码作到“炉火纯青”的地步,直到全部的代码都 “烂熟于心”的地步。
switch($column){ case 'match_bd31': if(($mb_inball==3) && ($tg_inball==1)) $status=1;break; }
1. 简单的写法 echo '<span>hello</span>'; 2. 算是比较融合的写法 <?php for($i=1; $i<3;$i++){ ?> <tr><th>some text</th></tr> <?php } ?> 3. 更彻底的更紧密的写法 for($i=1;$i<=3;$i++) { $str .="<a href='{$this->pageUrl}={$i}' >$i</a>"."\n" ; $str .= "<a href='{$this->pageUrl}={$i}'>$i</a>"."\n"; }
修改apache httpd的监视端口/服务器端口,很是简单,就只是改变一下 listen 80的值,好比8080,而后重启httpd服务便可.
在windows下,主配置是在conf/下的httpd.conf, 还能够包含一些附加配置去增长apache的一些附加features, 附加配置是放在conf/extra目录中,而后只须要在httpd.conf主配置中包含这些附加配置便可.或直接将附加配置文件也是conf结尾的 **.conf
的 内容拷贝到主配置文件中.
添加附加配置文件, 确实是添加要去掉#号, 若是加上#, 就被屏蔽了,也就是,不包含这个附加配置
当附加配置的内容有错误的时候,有可能致使 主配置文件出错->致使apache服务启动不起来.
$sql="select name from users which location='$location'";
$conn = new mysqli($db_host, $db_user, $db_passwd, $db); ...