-
如果构造函数定义成了私有方法,则不允许直接实例化对象了,这时候一般通过静态方法进行实例化,在设计模式中会经常使用这样的方法来控制对象的创建,比如单例模式只允许有一个全局唯一的对象。
class Car {
private function __construct() {
echo 'object create';
}
private static $_object = null;
public static function getInstance() {
if (empty(self::$_object)) {
self::$_object = new Car(); //内部方法可以调用私有方法,因此这里可以创建对象
}
return self::$_object;
}
}
//$car = new Car(); //这里不允许直接实例化对象
$car = Car::getInstance(); //通过静态方法来获得一个实例查看全部 -
直接写的字符串是不会匹配的. 只有符合正则规则才会匹配
查看全部 -
元字符:正则表达式中具有特殊含义的字符
\ 转义字符 \s匹配任意空白符
^ 在方括号外面时,表示断言目标的开始位置 /^我[^\s]+(苹果|香蕉)$/
作为第一个字符时,表示字符取反 [^\s]匹配任意非空白符
$ 断言目标的结束位置 /^我[^\s]+(苹果|香蕉)$/
. 匹配除换行符外的任何字符 [\w\.\-]
[ 开始字符类定义
] 结束字符类定义
| 开始一个可选分支 苹果|香蕉 匹配苹果或香蕉
( 子组的开始标记
) 子组的结束标记
? 作为量词表示0次或1次匹配
* 量词,0次或多次匹配
+ 量词,1次或多次匹配 [^\s]+一次或多次匹配空白字符
{ 自定义量词开始标记
} 自定义量词结束标记
- 标记字符范围
在方括号内时,0-9表示0到9之间的所有数字
/^我[^\s]+(苹果|香蕉)$/
^开始
查看全部 -
/http:\/\//
正则匹配模式由分隔符/包括
如果正则匹配模式中需要匹配分隔符,则可以使用反斜杠\进行转义,即是标注正则匹配模式中的分割符是需要匹配的对象
$p = '/' . preg_quote($p, '/') . '/';
点号.用来串联字符串
preg_quote来标注变量$p中存在需要匹配的字符'/'
查看全部 -
?php
clahttps://www.imooc.com/code/547#editor-tabs-phpss Car {
public $name = 'car';
public function __clone() { // __clone来进行对象复制
$obj = new Car();
$obj->name = $this->name;
}
}
$a = new Car(); // 声明一个对象a
$a->name = 'new car'; // 对象a的名字定义为'new car'
$b = clone $a; // 克隆对象a,把对象a属性name的值复制复制给对象b
if ($a == $b) echo '=='; //true 两个对象都是同一个类的实例,两个对象的属性都相等
if ($a === $b) echo '==='; //false 两个对象是否是同一个
$str = serialize($a); // 对象序列化成字符串
echo "\n" . $str.'<br>';
$c = unserialize($str); // 字符串反序列化为对象
var_dump($c);
// “var_dump”是PHP中的调试函数,用于判断一个变量的类型与长度,并输出变量的数值。
查看全部 -
<?php
class Car {
public $speed = 10;
/**
* 方法__call实现重载:
* 当调用与参数$name匹配的函数时,会把该函数在类中重新载入
*/
public function __call($name, $args) {
if ($name == 'speedDown') {
$this->speed -= 10;
}
}
}
$car = new Car();
$car->speedDown(); //调用不存在的speedDown方法
echo $car->speed;
/**
* __set: 实现对不存在的属性赋值
*/
public function __set($key, $val) {
$this->ary[$key] = $val;
}
$car->name = '汽车'; // 当类中属性name不存在时,创建属性name,并赋值
/**
* __get: 实现对不存在的属性读取
*/
public function __get($key) {
if (isset($this->ary[$key])) { // 如果类中的属性key不存在
return $this->ary[$key]; // 返回这个值
}
return null;
}
/**
* __isset: 判断属性是否设置
*/
public function __isset($key) {
if (isset($this->ary[$key])) {
return true; // 如果属性已设置,返回true
}
return false;
}
/**
* __unset: 销毁属性
*/
public function __unset($key) {
unset($this->ary[$key]); // 直接销毁属性key
}
查看全部 -
class Car { // 定义一个类Car
public $speed = 0; // 定义类中的一个属性$speed public function speedUp() { // 定义类中的一个方法speedUp $this->speed += 10; // 使用$this代表当前类,并使用$this->speed来在该类的方法中调用该类的属性 return $this->speed; // 类Car的方法Speed是一个函数,他返回当前类的属性speed的值 } } class Truck extends Car { // 定义一个类Truck继承类Car public function speedUp() { // 在子类中重写父类中已有的方法speedUp $this->speed = parent::speedUp() + 50; // 在子类的方法中调用父类的方法 return $this->speed; // 返回值是子类Truck继承父类的属性speed } } $car = new Truck(); // 声明一个对象car,该对象是类Truck的一个实例 $car->speedUp(); // 调用对象的方法speedUp(),将在类Truck中寻找方法 echo $car->speed; // 打印出对象的属性speed 重点1 使用parent::来调用子类中与父类重名的方法
查看全部 -
<?php
//定义一个Car类并实例化一个对象
class Car {
public $name = "布加迪威龙";
public $money = 2000;//定义属性
public function getInfo() {
echo "品牌名是:".$this->name."<br>价值是:".$this->money;
}
}
$car = new car();
$car->getInfo();
?>
查看全部 -
<?php
$fruit=array('苹果','香蕉','菠萝');
foreach($fruit as $key=>$value){
echo '<br>第'.$key.'值是:'.$value;
}
?>
一个点都不可以少
查看全部 -
$arr=array()查看全部
-
前页为$page,每页显示$n条数据,那么m为当前页前面所有的数据,即$m = ($page-1) * $n
<?php
//连接数据库
mysql_connect('127.0.0.1', 'code1', '');
mysql_select_db('code1');
mysql_query("set names 'utf8'");
$page = 2;
$pagesize = 2;//预设翻页参数
//在下两行构建分页查询
$offset = ($page - 1) * $pagesize;
$sql = "select * from user limit $offset, $pagesize";
//获取翻页数据
$result = mysql_query($sql);
$data = array();
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
$data[] = $row;
}
echo '<pre>';
print_r($data);
echo '</pre>';
查看全部 -
获取数据集中的一行数据,最常用的是mysql_fetch_array
//连接数据库
mysql_connect('127.0.0.1', 'code1', '');
mysql_select_db('code1');
mysql_query("set names 'utf8'");
//数据预处理 防止查询不到数据
mysql_query("insert into user(name, age, class) values('王二', 19, '高三五班')");
//进行数据查询
$sql = "select * from user limit 1";
$result = mysql_query($sql);
$row = mysql_fetch_array($result);//在这里获取一行数据
echo '<pre>';
print_r($row);
echo '</pre>';
//使用mysql_fetch_array函数获取一行数据,并将他赋值到$row变量中,以便于后面输出。
查看全部 -
插入数据其实也是通过执行一个sql语句来实现,通常数据都是存储在变量或者数组中,因此sql语句需要先进行字符串拼接得到。
$name = '李四';
$age = 18;
$class = '高三一班';
$sql = "insert into user(name, age, class) values('$name', '$age', '$class')";
mysql_query($sql); //执行插入语句查看全部 -
PHP要对数据库进行操作,首先要做的是与数据库建立连接,通常我们使用mysql_connect函数进行数据库连接,该函数需要指定数据库的地址,用户名及密码。
$host = 'localhost';
$user = 'code1';
$pass = '';
$link = mysql_connect($host, $user, $pass);PHP连接数据库的方式类似于直接在命令行下通过进行连接,类似:mysql -hlocalhost -ucode1 -p,当连接成功以后,我们需要选择一个操作的数据库,通过mysql_select_db函数来选择数据库。
mysql_select_db('code1');
通常我们会先设置一下当前连接使用的字符编码,一般的我们会使用utf8编码。
mysql_query("set names 'utf8'");
通过上面的步骤,我们就与数据库建立了连接,可以进行数据操作了。
查看全部 -
//创建可抛出一个异常的函数
function checkNum($number){
if($number>1){
throw new Exception("异常提示-数字必须小于等于1");
}
return true;
}<?php
$filename = 'test.txt';
try {
if (!file_exists($filename)) {
throw new Exception('文件不存在');
}
} catch(Exception $e) {
echo $e->getMessage();
}
查看全部
举报