网页资讯贴吧知道视频音乐图片地图文库
进入贴吧全吧搜索吧内搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
04月13日漏签0天
php吧 关注:185,547贴子:1,133,176
  • 看贴

  • 图片

  • 精品

  • 视频

  • 游戏

  • 26回复贴,共1页
<<返回php吧
>0< 加载中...

【开始学习PHP,以后在这帖里做学习记录~!】

  • 只看楼主
  • 收藏

  • 回复
  • 鱿鱼戏水_
  • 面向过程
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
JS学了差不多2个月,现在转战PHP,为了学PHP特地买了本书。

在这吧里也开个帖,因为我认为这样才能强迫自己去总结


  • 鱿鱼戏水_
  • 面向过程
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
首先是在PHP中创建类,类的作用就相当于 CSS中的“.”,给具有相同属性的事物继承属性。

格式如下
class classname{
//在这里添加各种属性操作
}


  • 鱿鱼戏水_
  • 面向过程
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
类还可以继承已经的类,要用到extends

如
class A{
public $attr1=10;
}
class B extends A{
public $attr2=20;//类B将继承类A除了private的所有属性,并增加只属于自己的方法
}
$test=new B();//这个变量包含了类B和类A的属性
echo $test->attr2;//输出20,在这里我也郁闷了好久,为什么attr2前面不加$....害我测试半天
echo $test->attr1;//输出10,说明类B已经继承类A
$test=new A();
echo $test->attr1;//输出10
echo $test->attr2;//出错,因为B继承A,并添加属性,A不会变

----------------
除了继承,还可以在类 里面给变量函数添加作用域

如
class classname{
public $attr1;//公共的属性,默认属性,意思是可以在外部访问
private $attr2;//私有的属性,这属性只能在内部访问,不能在外部访问,另外该属性不能类的继承
protected $attr3;//介于公共属性和私有属性之间的,这属性只能在内部访问,但是却可以类的继承
}

继续上面的例子
class A{
public $attr1=10;
private $attr2=20;
protected $attr3=30;
}
class B extends A{
public $attr4=40;
public function test1(){
return $this->attr2;
}
public function test2(){
return this->attr3;
}
}

$test=new B();
echo $test->attr1;//输出10,已经继承,因为是公共属性
echo $test->attr2;//出错,private不能继承;
echo $test->attr3;//出错,protected可以继承,但不能在外部访问
echo $test->test1();//出错,因为这属性不能继承,所以类B内部也访问不到,但是类A内部却可以访问
echo $test->test2();//输出30,因为可以继承,并且是在内部访问


  • メ絕対噯上伱
  • CLI
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
面向对象,都说很好学,但是我学了比较有压力


  • 91tui
  • 框架好玩
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
我看了很多类似于楼主这样的帖子!说什么学习记录以后的窝什么的,每天更新啊,什么的!我就这么久没砍到一个发帖回复超过30篇的!


  • 鱿鱼戏水_
  • 面向过程
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
我在JS吧里写过记录的,把DOM编程艺术一本都写完了


  • meng1002875716
  • 我是变量
    5
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
走自己的路,让别人去说吧


  • 鱿鱼戏水_
  • 面向过程
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
谢了,这两天经理叫我把一个网站前台搞好,没空写了

明天大概可以继续了


  • qq178337830
  • 记事本
    3
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
这个理解。把我雷着了。


  • 125.73.228.*
  • Warning
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
一针见血


  • 鱿鱼戏水_
  • 面向过程
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
常量与变量的区别就是,常量一旦定义了就不可改变,而且常量被声明了是全局变量。

定义常量用define,定义变量用“$”符号。

比如定义一个常量名是VALUE1,值是10。
define('VALUE',10);
echo VALUE;//输出10。前面不用加“$”


  • 鱿鱼戏水_
  • 面向过程
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
define('VALUE1',10); //少打了个1。。


  • 鱿鱼戏水_
  • 面向过程
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
PHP数据类型
Interger(整数)
Float(浮点数),也叫Double。
String(字符串)
Boolean(布尔值)
Array(数组)
Object(对象)。
另外还有特殊类型,NULL(空),resource(资源)
--------------
在定义一个变量时会直接定义初始数据类型。
比如
$A1=100;//定义一个整数的数据类型
$A2=10.20;//定义一个浮点数 数据类型
$A3="HELLO";//定义一个字符串

当然,数据类型也可以更改,只要改变值就改数据类型了。
比如
$a=123;
$a="hello";//这样就可以从整数改成字符串了。
如果不想改变值改变数据类型的话。

可以使用settype函数来更改数据类型
$a=123;
可以使用gettype函数来确认变量的数据类型
echo gettype($a);//输出integer
settype($a,'string');//更改$a数据类型为字符串
echo gettype($a);//输出string,说明数据类型更改成功

还有一种方法可以更改数据类型,但是这种方法只能把更改数据类型后的值赋值给另一个变量,不能改变原先变量的数据类型
比如上面的例子
$a=123;
$b=(string)$a;//更改$a的数据类型为字符串,并赋值给$b,但$a的数据类型不变
可以确认下
echo gettype($a);//输出integer
echo gettype($b);//输出string




  • susie22261
  • 路过酱油
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
顶一下 好好学习


  • 雷霆炼狱
  • 路过酱油
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
在php里面用到面向对象的好像很少啊


  • weiye890929
  • 框架好玩
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼


  • 鱿鱼戏水_
  • 面向过程
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
操作符没什么好说的,和javascript 差不多都一样,不一样的地方就是,引用操作符。

引用操作符用“&”符号,如果不用引用操作符进行赋值
$a=8;
$b=$a;
$a=5;
echo $b;//输出8

如果用了引用操作符
$a=8;
$b=&$a;
$a=5;
echo $b;//输出5

也就是说,不用引用操作符,变量$b只是$a的一个副本。


  • 鱿鱼戏水_
  • 面向过程
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
数据类型还可以使用特定类型的测试函数,并返回true或false
is_array();//检测变量是否数组
is_double(),is_float(),is_real();//3个作用都一样,检查变量是否浮点数
is_long(),is_int(),is_integer();//检查变量是否整数
is_string();//检查变量是否字符串
is_bool();//检查变量是否布尔值
is_object();//检查变量是否是一个对象
is_resource();//检查变量是否是一个资源
is_null();//检查变量是否为NULL
is_scalar();//检查该变量是否是标量,即,一个整数,布尔值,字符串或浮点数
is_numeric();//检查该变量是否是任何类型的数字或数字字符串
is_callable();//检查该变量是否是有效的函数名称
---------------
我们可以利用返回一个布尔值,来写判断,比如
$a='hello';
if(is_string($a)){
echo $a."是一个字符串";
}else{
echo $a."不是一个字符串";
}
最终输出“hello是一个字符串”
如果把$a改成数字123,那么就会输出“123不是一个字符串 ”


  • 鱿鱼戏水_
  • 面向过程
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
测试变量状态
我们可以用isset()函数来测试一个变量是否被设置了,并返回布尔值
$a=123;
echo isset($a);
输出1,1在布尔值里就是true

还有个类似功能的函数empty(),用来测试变量是否存在,以及他的值是否非空。

如果要销毁一个函数,可以用unset()函数
$a=123;
echo $a;
unset($a);
echo $a;
最后出错,因为变量$a已经被销毁


  • 遥不可及L
  • 记事本
    3
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
好乱,不知道是什么,楼猪教我


  • 鱿鱼戏水_
  • 面向过程
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
如果需要在PHP中打开一个文件,用fopen函数,将返回一个文件的指针,可以把指针传递给一个变量

$fp=fopen("test.txt","w");
fopen的第二个参数是指对文件做什么操作,w表示只写操作,还有几个操作分别是
r,只读操作,只可以读
r+,读写操作,可以读也可以写,读操作和r相同,当写入内容时,会把文件开头的文本给替换掉
w,写模式,不能读只能写,如果文件有内容,则会删除所有内容重新写
w+,写模式,从文件头开始读写.//话说这个我还真试不出来和w有什么区别
x,谨慎写,如果文件不存在则和w相同,如果文件存在就返回false,并产生一个警告
x+,谨慎写//也不知道有什么用。。。
a,追加操作,如果文件里有内容,则会把新的内容添加到内容的结尾处,如果文件不存在,则新建一个文件
a+,追加操作//也试不出不出和a的区别

------------------------
如果想要对一个文本文件写内容,可以用fwrite函数,前提是已经用fopen打开文件
$fp=fopen("test.txt","w");//打开文件,并执行只写操作
可以试着先在test文本文件里添加一些内容
再
fwrite($fp,"123");
打开网页后,在看看test文本文件,是不是发现里面的内容全部清空并添加了新内容
如果想把新内容追加到原先的内容后面,就用追加操作“a”
$fp=fopen("test.txt","a");
先在test文本里随意添加内容,如"123"
fwrite($fp,"asd")
再打开文本,文本内容已经编程123asd

如果你在fopen添加了只读的操作“r”,那么用fwrite文本内容不会改变
------------------------
如果需要读文本里的内容,可以用fgets,fgetss函数
fgets函数是值读取文本里的每一行,执行一次就换行,在执行在换行
$fp=fopen("test.txt","a");
$order=fgets($fp,999);
echo $order;
执行后可以看到文本里的第一行已被输出
这个函数的第二个参数是指要取出的字节数,比给出的数字少1,如上设置999就是最大取出998个字节,比如文本的第一行有10个字母,你给出参数8,就会取出7个字母,并输出,要注意一个汉字等于2个字节

fgetss和fgets函数作用基本相同,只有在文本里包含HTML代码或者PHP代码时,fgets会把他解析出来,而fgetss则会跳过,
例如test文本里有的内容是
“<h1>hello</h1>”
$fp=fopen("test.txt","a");
$order=fgets($fp,999);
echo $order;
就会看到被解析后的hello。
如果用fgetss,则不会被解析
$fp=fopen("test.txt","a");
$order=fgetss($fp,999);
echo $order;


想要把文本里的每行内容都输出来,例如test.txt文本的内容为
123
456
789
可以
$fp=fopen("test.txt","a");
$order=fgetss($fp,999);
echo $order."<br />";
$order=fgetss($fp,999);
echo $order."<br />";
$order=fgetss($fp,999);
echo $order."<br />";
这种方法并不好用,最好的方法是循环执行,当检查到是文本的最后一行时,停止操作。
知道文本什么读完可以用feof()函数,这个函数可以检查当前是否最后一行,如果是,返回true,否则false,可以利用这点进行while循环
while(!feof($fp)){
$order=fgets($fp,999);
echo $order.'<br />'
}
这方法和上面的效果完全一样,却节省了很多代码。
-----------------------------
读取整个文件用readfile,fpassthru,file函数
readfile函数是读取整个文件,并自动输出到浏览器里,这个函数不需要用fopen打开文件
readfile("test.txt");
将会看到test的文本内容被显示到浏览器里,不过每行不会换行
fpassthru和readfile效果完全相同,只是他需要用fopen打开文件先
$fp=fopen("test.txt","r");
fpassthru($fp);
file函数是将文本的每一行发送到一个数组里名,但并不会输出到浏览器
$farray=file("test.txt");




  • 鱿鱼戏水_
  • 面向过程
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
除了读取一行,还能用fgetc函数读取一个字符,嗯fgets用法差不多


fread函数,读取任意长度
$fp=fopen('test.txt','r');
$order=fread($fp,999);
echo $order;


file_exists(),检查文件是否存在,存在返回true,否则返回false
if(file_exists('test.txt')){
echo "文件存在";
}else{
echo "文件不存在";
}


filesize(),确定文件大小,返回字节为单位的大小
echo filesize("test.txt")."b";

unlink(),删除一个文件
unlink('test.txt');

----------------------------------
文本位置定位,rewind(),fseek(),ftell()
rewind可以将文本的位置重置,ftell是告诉你文本目前在什么位置,fseek可以设置文本位置
如果tess文本内容为123456
$fp=fopen('test.txt','rb');
while(!feof($fp)){
$order=fgetc($fp);
if(!feof($fp)){
echo $order."的位置在".ftell($fp).'<br />';
}
}
输出结果为
1的位置在1
2的位置在2
3的位置在3
4的位置在4
5的位置在5
6的位置在6
如果在循环里加个rewind,就会死循环,使用要谨慎啊!

想要自己设置文本的位置,可以用fseek,还是上面的文本为例
$fp=fopen('test.txt','rb');
fseek($fp,2);
while(!feof($fp)){
$order=fgetc($fp);
if(!feof($fp)){
echo $order."的位置在".ftell($fp).'<br />';
}
输出结果
3的位置在3
4的位置在4
5的位置在5
6的位置在6
说明已经移动了2个位置


  • 鱿鱼戏水_
  • 面向过程
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
数组,用range()函数可以返回一个升序排列的数组
$a=range(1,10);//创建1-10的数组
$a=range('a','z');//创建a-z的小写字母
range可以给第三个参数,设置值之间的步幅
$a=range(1,10,2);//创建1,3,5,7,9的数组
----------
循环访问数组,可以用for循环
$a=range(1,10);
for($i=0;$i<10;$i++){
echo $a[$i]."<br />";
}
会看到输出1-10。
另外也可以使用数组的专用循环函数foreach()
foreach($a as $current){
echo $current."<br />";
}
这个函数每执行一次,就会把当前数组索引的值赋值给$current变量,然后索引向右移,直到数组结束。

数组除了用数字索引,可以用自定义的关键字索引
$a=array('one'=>1,'two'=>2,'three'=>3);
这个数组有3个关键字和值,分别是
$a['one'],$a['two'],$a['three']。

用关键字索引后,无法用for循环数组,可以用foreach或each函数
foreach,可以把关键字和值各赋值给一个变量
foreach($a as $key=>$value){
echo $key."-".$value."<br />";
}
将会输出
one-1
two-2
three-3

each函数会把关键字和值分别赋值给一个数组里面
while($elem=each($a)){
echo $elem['key'].'-'.$elem['value'].'<br />';
}
输出结果和上面一样,把数组的关键字赋值给了$elem数组的key关键字里,把值赋值给了value关键字里

each可以和list函数配合起来
while(list($key,$value)=each($a)){
echo $key.'-'.$value.'<br />';
}
输出结果一样,把$a数组里的关键字和值分别赋值给$key,$value变量

reset函数可以重置数组的位置


  • 鱿鱼戏水_
  • 面向过程
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
多维数组,就是数组里包含另一个数组
$a=array(array(1,2,3),array(4,5,6),array(7,8,9));
这样$a里就有3个数组
可以手动把他们全部显示出来
echo $a[0][0].$a[0][1].$a[0][2].'<br />'.$a[1][0].$a[1][1].$a[1][2].'<br
/>'.$a[2][0].$a[2][1].$a[2][2].'<br />'
当然这样很麻烦,用两个for循环可以更简单
for($i=0;$i<3;$i++){
for($j=0;$j<3;$j++){
echo $a[$i][$j];
}
echo '<br />';
}
输出和上面一样。



  • 鱿鱼戏水_
  • 面向过程
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
数组排列
sort函数,对数组进行升序排列
$a=array(5,2,1,3,4);
sort($a);
foreach($a as $current){
echo $current."<br />";//输出12345,也可以对字母,汉字进行排序
}

asort和sort一样,但是kort可以对关键字进行排序,而不是值
$a=array('ddd'=>4,'eee'=>5,'aaa'=>1,'ccc'=>3);
ksort($a);
foreach($a as $key=>$value){
echo $key.'=>'.$value.'<br />';
}
会输出
aaa=>1
ccc=>3
ddd=>4
eee=>5

sort,asort,ksort还有3个相反的函数,作用是反向排序,rsort,arsort,krsort。

还有几个特殊的排序函数,shuffle函数是将数组重新随机排序。
array_reverse是将所给的参数数组进行顺序相反的排序,并将排序好的数组作为值返回。
$a=array(5,1,4,6,7,3,9);
$b=array_reverse($a);
foreach($b as $value){
echo $value.'<br />';
}
会输出9376415
--------------------


  • 鱿鱼戏水_
  • 面向过程
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
MYSQL
创建一个数据库
create database test1;
创建一个名为test1的数据库

use test1;使用test1数据库,因为这个数据库里面还没有数据表,所以要创建个表

create table books(
customerid int unsigned not null auto_increment primary key,
name char(50) not null,
address char(100) not null,
city char(30) not null
);
这段代码创建了一个名为books的数据表,有4个字段
字段1是customerid,值为整形,且内容必须是或一个正数,值不能为空(NULL),如果不输入值,则值自动累加,把这个字段设为主键
字段2是name,最多50个字符,值不能为空
字段3是address,最多100个字符,值不能为空
字段4是city,最多30个字符,值不能为空

show tables;显示当前数据库里所有表的清单,前提必须要使用某个数据库
use test1;
show tables;这样就显示出了test1数据库里的所有表
describe books;可以查看该表的详细信息。

如果不知道有哪些数据库
describe books;显示所有数据库,前提是你有这个权限


  • 鱿鱼戏水_
  • 面向过程
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
之后要创建一个用户,要想创建管理员
grant all
on *.*
to admin indentified by 'admin1'
with rant option

其中all是允许用户有哪些权限,all指全部。
还有其他的权限如
SELECT 允许选择行
INSERT 允许 插入新行
UPDATE 允许 修改行
DELETE 允许 删除行
INDEX 允许 创建和拖动特定表的索引
ALTER 允许 改变显存表的结构,如添加列,重命名列,修改列的数据类型等
CREATE 允许创建芯数据库或表,如果指定了特定的数据库或表,他们只能够在该库或表创建
DROP 允许用户拖动删除数据库或表
不过上面的大部分是普通用户的权限,下面列出管理员的权限
CREATE TEMPORARY TABLES:允许在CREATE TABLES语句中使用temporary关键字
FILE:允许将数据从文件读入表,或从表读入文件
LOCK TABLES:允许使用LOCK TABLES语句
PROCESS:允许查看属于所有用户的服务器进程
RELOAD:允许重新载入授权表,清空授权,主机,日志和表
REPLICATION CLIENT:允许赋值主机(MASTER)和从机(SLAVE)上使用SHOW STATUS
SHOW DATABASES:允许使用SHOW DATABASES语句查看所有数据库列表,没有这个权限,用户只能看到他们能够看到的数据库
SHUTDOWN:允许关闭MYSQL服务器
SUPER:允许关闭属于任何用户的线程
。。
还有两个特殊权限
ALL:授予上面列出的所有全新啊
USAGE:不授予任何权限,这个权限只能允许用户登录,但是不允许任何操作
-------
on *.* 指的是权限所应用的数据库或表,*代表所有,如果想在其他表,比如
on test.* 就是权限只能应用于test数据库
on test.books 就是权限只能应用于test数据库的books数据表
-------
to admin indentified by 'admin1' 意思是用户名为admin,密码为admin1
with rant option 允许向别人授予自己所拥有的权限
-------
我们可以创建一个没有任何权限的用户
grant usage
on test.*
to test identified by 'test';
可以给他一些权限
grant select,insert,update,delete,index,alter,create,drop
on test.books
to test1;
如果觉得权限过高,也可以减少一些权限
revoke alter,create,drop
on test2.books
from test1;


登录百度帐号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 26回复贴,共1页
<<返回php吧
分享到:
©2020 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示