php笔记
1.要在一个函数中访问一个全局变量,需要使用 global 关键字。
function myTest() { global $x,$y; $y=$x+$y; }
PHP 将所有全局变量存储在一个名为 $GLOBALS[index] 的数组中。 index 保存变量的名称。这个数组可以在函数内部访问,也可以直接用来更新全局变量。
$x=5; $y=10; function myTest() { $GLOBALS['y']=$GLOBALS['x']+$GLOBALS['y']; }
当一个函数完成时,它的所有变量通常都会被删除。然而,有时候您希望某个局部变量不要被删除。
要做到这一点,请在您第一次声明变量时使用 static 关键字:
function myTest() { static $x=0; echo $x; $x++; } myTest(); myTest(); myTest(); ?>
函数参数
<?php function myTest($x) { echo $x; } myTest(5); ?>
echo 和 print 区别:
- echo - 可以输出一个或多个字符串
- print - 只允许输出一个字符串,返回值总为 1
PHP var_dump() 函数返回变量的数据类型和值:
$x = 10.365;
var_dump($x);
在 PHP 中,对象必须声明。
首先,你必须使用class关键字声明类对象。类是可以包含属性和方法的结构。
<?php class Car { var $color; function Car($color="green") { $this->color = $color; } function what_color() { return $this->color; } } ?>
以上实例中PHP关键字this就是指向当前对象实例的指针,不指向任何其他对象或类。
定义常量
最后一个参数是大小写是否敏感
define("GREETING", "欢迎访问 Runoob.com");
define("GREETING", "欢迎访问 Runoob.com", true);
字符串
并置运算符 (.) 用于把两个字符串值连接起来。
<?php $txt1="Hello world!"; $txt2="What a nice day!"; echo $txt1 . " " . $txt2; ?>
strlen() 函数返回字符串的长度(字符数)。
strpos() 函数用于在字符串内查找一个字符或一段指定的文本。
<?php echo strpos("Hello world!","world"); ?>
== 等于
===绝对等于,类似js里的===
and 与,or 或,xor 异或
&& 与,|| 或,!非
数组合并用 +
$x = array("a" => "red", "b" => "green"); $y = array("c" => "blue", "d" => "yellow"); $z = $x + $y; // $x 和 $y 数组合并
数组
$cars=array("Volvo","BMW","Toyota");
遍历数组
<?php $cars=array("Volvo","BMW","Toyota"); $arrlength=count($cars); for($x=0;$x<$arrlength;$x++) { echo $cars[$x]; echo "<br>"; } ?>
关联数组
<?php $age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43"); echo "Peter is " . $age['Peter'] . " years old."; ?>
数组排序:很多种比如
<?php
$cars=array("Volvo","BMW","Toyota");
sort($cars);
?>
PHP超级全局变量
http://www.runoob.com/php/php-superglobals.html
PHP 超级全局变量列表:
- 全局变量数组
- $GLOBALS
- 获取server相关变量的值,比如$_SERVER['REMOTE_ADDR']来获取ip
- $_SERVER
- 获取页面传来的参数,比如$name = $_REQUEST['fname'];
- $_REQUEST
- $name = $_POST['fname'];
- $_POST
- echo "Study " . $_GET['subject'] . " at " . $_GET['web'];
- $_GET
- $_FILES
- $_ENV
- $_COOKIE
- $_SESSION
post实例
<html> <body> <form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>"> Name: <input type="text" name="fname"> <input type="submit"> </form> <?php $name = $_POST['fname']; echo $name; ?> </body> </html>
foreach循环
<?php $x=array("one","two","three"); foreach ($x as $value) { echo $value . "<br>"; } ?>
PHP 的真正威力源自于它的函数。
在 PHP 中,提供了超过 1000 个内建的函数。
PHP 魔术变量
<?php echo '这是第 " ' . __LINE__ . ' " 行'; ?> <?php echo '该文件位于 " ' . __FILE__ . ' " '; ?> <?php echo '该文件位于 " ' . __DIR__ . ' " '; ?>
<?php function test() { echo '函数名为:' . __FUNCTION__ ; } test();
__TRAIT__
优先顺序是当前类中的方法会覆盖 trait 方法,而 trait 方法又覆盖了基类中的方法。
<?php class Base { public function sayHello() { echo 'Hello '; } } trait SayWorld { public function sayHello() { parent::sayHello(); echo 'World!'; } } class MyHelloWorld extends Base { use SayWorld; } $o = new MyHelloWorld(); $o->sayHello(); ?>
默认情况下,所有常量、类和函数名都放在全局空间下,就和PHP支持命名空间之前一样。
命名空间通过关键字namespace 来声明。如果一个文件中包含命名空间,它必须在其它所有代码之前声明命名空间。
< ?php
// 定义代码在 'MyProject' 命名空间中
namespace MyProject;
// ... 代码 ...
以下代码会出现语法错误:
html>
<?php
namespace MyProject; // 命名空间前出现了“<html>” 会致命错误 - 命名空间必须是程序脚本的第一条语句
?>
子命名空间
<?php namespace MyProject\Sub\Level; //声明分层次的单个命名空间
PHP 面向对象
对象的主要三个特性:
- 对象的行为:可以对 对象施加那些操作,开灯,关灯就是行为。
- 对象的形态:当施加那些方法是对象如何响应,颜色,尺寸,外型。
- 对象的表示:对象的表示就相当于身份证,具体区分在相同的行为与状态下有什么不同。
类定义如下
<?php class phpClass { var $var1; var $var2 = "constant string"; function myfunc ($arg1, $arg2) { [..] } [..] } ?>
$runoob = new Site;
// 调用成员函数,设置标题和URL
$runoob->setTitle( "菜鸟教程" );
// 调用成员函数,获取标题和URL
$runoob->getTitle();
构造函数
function __construct( $par1, $par2 ) {
$this->url = $par1;
$this->title = $par2;
}
析构函数
析构函数(destructor) 与构造函数相反,当对象结束其生命周期时(例如对象所在的函数已调用完毕),系统自动执行析构函数
<?php class MyDestructableClass { function __construct() { print "构造函数\n"; $this->name = "MyDestructableClass"; } function __destruct() { print "销毁 " . $this->name . "\n"; } } $obj = new MyDestructableClass(); ?>
继承
class Child extends Parent { // 代码部分 }
接口
<?php // 声明一个'iTemplate'接口 interface iTemplate { public function setVariable($name, $var); public function getHtml($template); } // 实现接口 class Template implements iTemplate { private $vars = array(); public function setVariable($name, $var) { $this->vars[$name] = $var; } public function getHtml($template) { foreach($this->vars as $name => $value) { $template = str_replace('{' . $name . '}', $value, $template); } return $template; } }
常量
const constant = '常量值';
抽象类
bstract class AbstractClass { // 强制要求子类定义这些方法 abstract protected function getValue(); abstract protected function prefixValue($prefix); // 普通方法(非抽象方法) public function printOut() { print $this->getValue() . PHP_EOL; } }
static final同java
调用父类构造方法
PHP 不会在子类的构造方法中自动的调用父类的构造方法。要执行父类的构造方法,需要在子类的构造方法中调用 parent::__construct() 。