周一干不干活-PHP+MySQLi,-phpmysqli
周一干不干活-PHP+MySQLi,-phpmysqli
hi
本来是雄心壮志的要干活的,哪知天有不测,早上大阴天起不来,中午又回寝室折腾衣服(做女工啊,牛不牛)没睡午觉,这样的迷糊状态,怎么科研,写这个好了。
1、PHP的OOP编程
4.7 多态
--定义
由于接口的方法实现有多种多样,这种特性称之为多态
--栗子
function eat($obj){
if($obj instanceof ICanEat){
$obj->eat("FOOD"); // 不需要知道到底是Human还是Animal,直接吃就行了
}else{
echo "Can't eat!\n";
}
}
$man = new Human();
$monkey = new Animal();
// 同样的代码,传入接口的不同实现类的时候,表现不同。这就是为什么成为多态的原因。
eat($man);
eat($monkey);
--小结
/**
* 多态
* 1. 只要某个对象实现了接口(instanceof),就可以直接在对象上调用接口的方法
*/
4.8 抽象类
--问题
连接接口的类,某些方法都是相同的,那么是否能够允许类中不实现,而是在接口中实现。
比如,人和动物吃东西不同,但呼吸相同。
--栗子
abstract class ACanEat{ //关键字改变
abstract public function eat($food);//需要类自行实现的,前面加上abstract关键字
public function breath(){
echo "Breath use the air.
";
}
}
class Human extends ACanEat{ //实现接口用implenments,这里用extends
public function eat($food){
echo "Human eating ".$food."
";
}
}
class Animal extends ACanEat{ //实现接口用implenments,这里用extends
public function eat($food){
echo "Animal eating ".$food."
";
}
}
$xiaoming=new Human();
$xiaohei=new Animal();
$xiaoming->breath();$xiaoming->eat("food");
$xiaohei->breath();$xiaohei->eat("shit");
--小结
/**
* 抽象类
* 1. 抽象类允许类里面的部分方法暂时没有具体实现,这些方法我们成为抽象方法
* 2. 一旦类里面有抽象方法,这个类就必须是抽象类
* 3. 抽象类跟接口一样,不能直接实例化为对象
*/
五、魔术方法
5.1 简介
注意所有的魔术方法前面都是两个下划线__
PHP中的OOP特有的。
比如构造函数和析构函数。
5.2 __tostring()和__invoke()
--定义
__tostring(),当对象被当作String使用时,这个方法会被自动调用;echo $obj;
__invoke(),当对象被当作方法(函数)调用时,这个方法被自动调用;$obj(4);
--栗子
/*
* tostring()魔术方法
* invoke()魔术方法
*/
class MagicTest{
public function __toString(){
return "This is the class magictest.";
}
public function __invoke($x){
echo "
".$x;
}
}
$obj=new MagicTest();
echo $obj;
$obj(5);
用法和构造函数析构函数类似。比较自动化(自动调用,即使没有声明也会调用),但同时比较容易出错,小心。
5.3 __call()和__callStatic()或重载(overloading)
--定义
当对象访问不存在的方法名称时,__call()会被自动调用;
当对象访问不存在的静态方法名称时,__callStatic()会被自动调用;
这两个方法,又称为重载(不同于重写);通过这两个方法,同一个方法的名称的调用可以对应不同的方法实现
--栗子
/*
* tostring()魔术方法
* invoke()魔术方法
*/
class MagicTest{
public function __toString(){
return "This is the class magictest.";
}
public function __invoke($x){
echo "
".$x."
";
}
public function __call($name,$arguments){ //__call的格式是固定的,第一个是方法名,第二个是方法内的参数
echo "Calling ".$name." with parameters: ".implode(",", $arguments)."
";
}
public static function __callstatic($name,$arguments){
echo "Static calling ".$name." with parameters: ".implode(",", $arguments)."
";
}
}
$obj=new MagicTest();
echo $obj;
$obj(5);
$obj->runTest("para1","para2");
$obj::runTest("para3","para4");
注意这里要求定义方法的时候格式是固定的。
5.4 __get()__set()__isset()__unset
--定义
这几个方法也被称为属性重载的魔术方法。
__set(),在给不可访问属性(一种是属性未定义,另一种是没有访问权限,如private)赋值时调用;
__get(),读取不可访问属性的值时调用;
__isset(),当对不可访问属性调用isset()或empty()时调用;
__unset(),。。。。。。。。。unset()。。。。。。。。。。
--栗子
/*
* tostring()魔术方法
* invoke()魔术方法
*/
class MagicTest{
public function __toString(){
return "This is the class magictest.";
}
public function __invoke($x){
echo "
".$x."
";
}
public function __call($name,$arguments){ //__call的格式是固定的,第一个是方法名,第二个是方法内的参数
echo "Calling ".$name." with parameters: ".implode(",", $arguments)."
";
}
public static function __callstatic($name,$arguments){
echo "Static calling ".$name." with parameters: ".implode(",", $arguments)."
";
}
public function __get($name){ //get要有name
return "Getting the property ".$name."
";
}
public function __set($name,$value){ //set要有名有值
echo "Setting the property ".$name." to value ".$value.".
";
}
public function __isset($name){ //判断是否定义了属性
echo "__isset invoked
";
return true;
}
public function __unset($name){ //撤销
echo "unsetting protery ".$name."
";
return true;
}
}
$obj=new MagicTest();
echo $obj;
$obj(5);
$obj->runTest("para1","para2");
$obj::runTest("para3","para4");
echo $obj->classname;
$obj->classname="shit";
echo isset($obj->classname)."
";
unset($obj->classname);echo "
";
echo empty($obj->classname)."
";
结果是
This is the class magictest.
5
Calling runTest with parameters: para1,para2
Static calling runTest with parameters: para3,para4
Getting the property classname
Setting the property classname to value shit.
__isset invoked
1
unsetting protery classname
__isset invoked
可以看到,其实isset和empty调用__isset时一对相反的操作。
然后,__set($name,$value)和__unset($name)是一对相反的操作,但所要元素不一样;
__isset($name),__get($name)都只需要名字(记住每个魔术方法的作用,理解了,就好记了)。
5.5 __clone()
--定义
就是克隆,或克隆
--栗子
先给出clone关键字的用法。
/*
* 克隆魔术方法
*/
class nbaPlayer{
public $name;
}
$james=new nbaPlayer();
$james->name='James';
echo $james->name."
";
$kobe=clone $james;
$kobe->name='Kobe';
echo $kobe->name;
clone后的,就是个单独的对象,对其操作不影响原对象。
加上__clone()
/*
* 克隆魔术方法
*/
class nbaPlayer{
public $name;
public function __clone(){
$this->name="shit";
}
}
$james=new nbaPlayer();
$james->name='James';
echo $james->name."
";
$kobe=clone $james;
echo $kobe->name."
";
$kobe->name='Kobe';
echo $kobe->name."
";
一般来说,用处在于clone后的初始化;或者说,当复制后,不想透露的某些信息的掩盖。
在工作中常用到这一个,因为常有对某个对象的操作,又不想影响原有数据,就克隆/复制一个出来。
----------------------------------------
2、MySQLi扩展
一、安装及下载
1.1 优势及简介
更新更好,PHP5及以后推荐使用(或者PDO)。
--优点
基于OOP和面向过程的使用;
支持预处理语句;
支持事务。
--其他
速度更快。安全性更好
1.2 安装及配置
--安装
配置php,开启php_mysqli.dll;
配置extension_dir='ext目录位置';
重启服务器。
(我用的是WAMP,直接打对勾就行)
--验证
/*
* 验证mysqli是否开启
*/
//phpinfo();
//2.检测扩展是否已经加载
var_dump(extension_loaded('mysqli'));
var_dump(extension_loaded('curl'));
echo '
';
//3.检测函数是否存在
var_dump(function_exists('mysqli_connect'));
echo '
';
//4.得到当前已经开启的扩展
print_r(get_loaded_extensions());
echo '
';
---
困了,回去洗洗睡觉。。。

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제









PHP를 사용하여 웹 애플리케이션을 작성할 때 MySQL 데이터베이스를 사용하여 데이터를 저장하는 경우가 많습니다. PHP는 MySQLi라는 MySQL 데이터베이스와 상호 작용하는 방법을 제공합니다. 그러나 때때로 MySQLi를 사용할 때 아래와 같은 오류 메시지가 표시될 수 있습니다. PHPFatalerror:Calltoundefoundfunctionmysqli_connect() 이 오류 메시지는 PHP가 내 항목을 찾을 수 없음을 의미합니다.

PHP가 mysqli에 연결할 수 없는 경우 해결 방법: 1. "php.ini" 파일을 엽니다. 2. "mysqli.reconnect"를 찾습니다. 3. "mysqli.reconnect = OFF"를 "mysqli.reconnect = on"으로 변경합니다.

PDOPDO는 PHP용 통합 인터페이스를 제공하는 객체 지향 데이터베이스 액세스 추상화 계층으로, 동일한 코드를 사용하여 다양한 데이터베이스(예: Mysql, postgresql, oracle)와 상호 작용할 수 있습니다. PDO는 기본 데이터베이스 연결의 복잡성을 숨기고 데이터베이스 작업을 단순화합니다. 장점과 단점 장점: 통합 인터페이스, 다중 데이터베이스 지원, 데이터베이스 작업 단순화, 개발 어려움 감소, 준비된 명령문 제공, 보안 향상, 트랜잭션 처리 지원 단점: 성능이 기본 확장보다 약간 낮을 수 있고, 외부 라이브러리에 의존하며, 오버헤드가 증가할 수 있습니다. 데모 코드는 PDO를 사용하여 mysql 데이터베이스에 연결합니다: $db=newPDO("mysql:host=localhost;dbnam

mysql의 실행 파일은 mysqld이고, mysqld는 Mysql 서버 프로그램을 나타내는 실행 파일이며, mysqld_safe는 간접적으로 mysqld를 호출하고 모니터 프로세스도 시작하는 시작 스크립트이다. .

PHP를 사용하여 MySQL 데이터베이스에 연결할 때 PHPWarning:mysqli_connect():(HY000/2002):Connectionrefused 오류 메시지가 표시되는 경우 아래 단계에 따라 이 문제를 해결할 수 있습니다. MySQL 서비스가 정상적으로 실행되고 있는지 확인하려면 먼저 MySQL 서비스가 정상적으로 실행되고 있는지 확인해야 합니다. 서비스가 실행되지 않거나 시작되지 않는 경우 연결 거부 오류가 발생할 수 있습니다. 당신은 할 수

MySQLi를 사용하여 PHP에서 데이터베이스 연결을 설정하는 방법: MySQLi 확장 포함(require_once) 연결 함수 생성(functionconnect_to_db) 연결 함수 호출($conn=connect_to_db()) 쿼리 실행($result=$conn->query()) 닫기 연결( $conn->close())

mysqli 확장을 사용하여 MySQL 데이터베이스에 연결하고 작동할 때 PHPFatalerror:Calltoundefinemethodmysqli::prepare() 오류가 발생하는 경우가 있습니다. 이 오류는 일반적으로 다음과 같은 이유로 발생합니다. PHP는 mysqli 확장에 대한 지원이 충분하지 않습니다. mysqli 확장이 올바르게 로드되거나 구성되지 않았습니다. MySQL 서버가 올바르게 구성되지 않았거나 실행 중입니다.

PHP를 사용하여 웹사이트를 개발할 때 데이터베이스 작업은 매우 일반적입니다. MySQLi는 MySQL 데이터베이스를 운영하기 위해 PHP에서 일반적으로 사용되는 확장 기능으로, 비교적 완전한 객체 지향 인터페이스, 절차적 인터페이스를 제공하고 준비된 명령문의 작업을 지원합니다. 그러나 때때로 mysqli의 준비된 명령문을 사용할 때 다음과 같은 오류가 발생합니다: PHPFatalerror:Calltoun Definedfunctionmysqli_stmt_bin
