查漏补缺,持续更新ing...

来源:互联网 发布:大风刮过知乎 编辑:程序博客网 时间:2024/05/19 18:10

1.$this :动态调用,指当前对象

通过一个例子,说明一下我当时的心理历程:

/*** 父类*/class A {function show(){echo $this->msg();}function msg(){return "";}}

 

这是父类,里面有两个方法, 我看到了show调用了msg,msg里面不是没有东西吗?这有什么意思? 是不是**啊?  (→_→)

然后再写了他的一个子类:

/*** A的子类之一*/class B extends A{function msg(){return "this is child";}}$b_obj=new B;echo $b_obj->show();

 

 

 根据查看的项目里A类的子类,我发现在A的子类里都会重写A类的msg()方法,最终调用的还是子类自己的方法。 产生这个问题的原因就是 我没理解  $this 的 真正意义。

通过上面的输出,在页面上可以看到结果:这是子类的输出。

在A类的show方法里 var_dump($this);  结果是: object(B)#1 (0) { }    也就是说 实例化B 调用show方法,根据继承关系 会找到A类里的show 方法,

$this是动态调用,$this指当前对象,这个时候的当前对象不一定就是A类的实例化对象啊,这时候的$this 是B类的实例化对象。

然后$this->msg();就等于是B类的实例化对象调用自己的msg方法。

如果A类里show 方法这样写 echo A::msg();   那么就是写死的调用,就是调用A类自己的方法。

 

弄明白了这个,真的觉得自己是菜的难受啊......  \(-_-||)/

 

2017-7-10   在菜的道路上,控制不住记几,越走越远......

 

1. 论$i++  和 ++$i 的区别

后++   最后对自己运算

前++   首先对自己运算       

这个很好记,先来后到,在前就先,在后最后。

1.1

<?php$i=1;$y=$i++ ;echo $y;// res: 1echo $i;//res: 2

 上面运算可分为 $y=$i   和 $i=$i+1

$i++ 最后 是对 $i 自己进行运算

<?php$i=1;$y=$i++ + 3;echo $y;// res: 4echo $i;//res:2

 上面运算分为 $y=1+3, $i=$i+1

因为 后++ 是最后对自己进行运算,所以先忽略,最后在对自己运算。

也就是 $i初始是1 所以就是1+3 赋值给 $y,运算结束了,到最后了,$i 对自己运算 $i=$i+1;

 

<?php$i=1;$y=$i++ + ++$i;echo $y;// res: 4echo $i;//res:3

上面运算可分为 $i=$i+1, $y=$i+$i, $i=$i+1

也就是 $y=2+2 ,$i=1+1+1

运算里出现了 ++$i,先来后到,在前就先,  所以 不管别的,$i=$i+1=2

这个时候经过 ++$i这一步运算,$i已经是2了,然后$y=$i++  +  ++$i  = 2++ + 2 =4   然后 $i++ = $i +1=2+1 =3

主要还是优先级的问题,看懂了记住就好,先来后到,在前就先,在后最后。

 

2017-7-12

 

1.file_put_contents()

这两天没事,看了看爬虫,就试着写了一个简单的爬虫,用到了 file_put_contents()这个函数。

关于这个函数,参数解释如下:

file_put_contents(file,data,mode,context)file 必需。规定要写入数据的文件。如果文件不存在,则创建一个新文件。data 可选。规定要写入文件的数据。可以是字符串、数组(一维数组)或数据流。mode 可选。规定如何打开/写入文件。可能的值:
  • FILE_USE_INCLUDE_PATH   //检查*filename*的副本路径 ,介个我不懂什么意思
  • FILE_APPEND          //如果设置,则在文件内容末尾追加内容,否则清空文件,重新写入
  • LOCK_EX         //锁定文件

该函数访问文件时,遵循以下规则:

  1. 如果设置了 FILE_USE_INCLUDE_PATH,那么将检查 *filename* 副本的内置路径
  2. 如果文件不存在,将创建一个文件
  3. 打开文件
  4. 如果设置了 LOCK_EX,那么将锁定文件
  5. 如果设置了 FILE_APPEND,那么将移至文件末尾。否则,将会清除文件的内容
  6. 向文件中写入数据
  7. 关闭文件并对所有文件解锁

如果成功,该函数将返回写入文件中的字符数。如果失败,则返回 False。

 

该函数file_put_contents()插入数据的时候默认是不换行的,如果想要换行,可以用到php的 PHP_EOL 它可自动识别系统并显示成相应的换行符。

如:file_put_contents($fileName,$b.PHP_EOL.PHP_EOL,FILE_APPEND|LOCK_EX);  //这个就是向$filename这个文件里插入$b,并且换两行。


1.php 有强制类型转换,在比较 字符串和数字的时候,字符串会被强制转换成数字,然后在进行比较

例如

<?php if(0=="a"){echo "eq";}else{echo "neq";}


1.冒泡排序:

<?php#冒泡排序法$arr = array(12,45,89,3,24,55,223,76,22,11,89,2,4,5,28,112,20,434,23,65,65,765,6,8,23,5,33,553,45,423,64,77,84,23);$tmp;for($i=0;$i<count($arr)-1;$i++ ){          for($j=0;$j<count($arr)-1-$i;$j++){        if($arr[$j] > $arr[$j+1]){            $tmp = $arr[$j];            $arr[$j] = $arr[$j+1];            $arr[$j+1] = $tmp;        }    }}print_r($arr);

 

这是一维数组,一维数组其实不用冒泡排序,有php数组函数就可以排序。

如果是二维数组的话只要在红色的地方再加上相应的键就好了,现在是从大到小排序。

真坑哦,标了红色也不显示,此处手动强行加红色

<红色>

    if($arr[$j]["这里"] > $arr[$j+1]["这里"]){

    $tmp = $arr[$j]["这里"];

    $arr[$j]["这里"] = $arr[$j+1]["这里"];

    $arr[$j+1]["这里"] = $tmp;

   } 

</红色>

 

2.微信:

调用微信地理位置接口,如果用户不允许获取位置信息,则会调用cancel:function(){} 方法,这里面我用到了ajax异步请求刷新页面,传参的时候定义了一个空的经度和纬度值,结果在微信上运行就报错 语法错误 非法的标识符(identifier),

去掉了空值,运行正常,因此注意在调用微信接口传参的时候不要用空值。

 

3.js

$('#id').each(function(){

alert($(this).text())

})

 进行DOM遍历 比如遍历一个ul 显示里面的li的文本内容

 

$.each(data,function(key,val){

alert(val.属性名)

})

遍历数据,比如json对象,应该alert(val.属性名)

 

4.php

json_decode($res,true); 这个true的作用就是把json对象转换成数组,转换以后的数据类型就是数组了。

file_put_contents($fileName,$content.PHP_EOL.PHP_EOL,FILE_APPEND|LOCK_EX); PHP_EOL 是换行符,根据系统自动识别,,FILE_APPEND 是换行追加,LOCK_EX 是加锁。

sleep(2);在php函数方法中就是 延时2秒再接着执行下面的代码。

20170801



5.$_SERVER;常用参数:


$_SERVER['HTTP_HOST'],  ===   string(15) "www.xxxxx.com"

$_SERVER['HTTP_HOST'], ===    string(55) "/index.php?m=module&c=controler&a=action&catid=423&id=6"

$_SERVER['HTTP_HOST'], ===  string(44) "m=module&c=controler&a=action&catid=423&id=6"



6.上传文件的input的事件

<input type="file" onchange='go()' name='my_file' id='upload' style='display:none'>

当页面点击浏览文件的时候,弹出选择文件框,当双击选择文件以后,就会出发 onchange()事件。

页面美化:点击某个div(或者其他) 触发js的点击事件click , click点击 id=upload的文件框,然后就等于直接弹出来选择文件, 选择完以后,直接出发onchange() 。

全程不需要input显示。


7.连接mysql数据库

 

$link =mysqli_connect("localhost", "root", "root") or die("数据库连接失败!");  //连接数据库 mysqli_set_charset($link,"utf8"); //设置字符集 mysqli_select_db($link,"test");//选择数据库$sql = "select * from my_test"; //编写sql$res=mysqli_query($link,$sql);//执行sqlwhile ($ress =mysqli_fetch_assoc($res)) {  //处理结果集        $shuju[]=$ress;    //用户数据    }mysqli_close($link);  //关闭数据库连接


8.php中 use关键字 和引入类


以tp框架来说,tp是通过命名空间自动导入对应的类,引入命名空间用use 关键字。

use 没有引入对应类的功能,只是引入了命名空间。

加载类,可以用自动加载__autoload() 来实现或者注册自动加载函数,当你用到的当前内存中不存在的类时,就会触发__autoload()或者你自己注册的自动加载函数进行类的自动加载,而use的作用就是 告诉去哪个命名空间内去找需要的类。

//注册自加载spl_autoload_register('autoload');function autoload($class){    require dirname($_SERVER['SCRIPT_FILENAME']) . '//..//' . str_replace('\\', '/', $class) . '.php';}/************************************* test *************************************/use factoryAbstract\AnimalFactory;$animal = new AnimalFactory();

上面这个,没有任何框架,就是一个简单的文件夹中,有两个文件 ,test.php 就是上面几行代码,animalfactory.php 文件 有命名空间,声明了AnimalFactory类。

test 注册了自动加载函数 autoload, use 引入了命名空间,下面实例化了AnimalFactory这个类。

上面的 use 和自动加载  在test.php中 二者缺一不可,缺少任何一个都会报错。

如果test.php里面声明了类,可以在类内利用__autoload() 函数在里面进行类的引入。










原创粉丝点击