这篇笔记,是自己学习的学习大杂烩,主要用于记录,方便自己查找,其中有些,现在自己看起来都有点好笑,因为错的太低级了,不过这也是成长,后面会梳理好的。
一、php 方面
##1.php环境搭建
os mac 环境搭建:
php -v 版本
安装:brew search php ,brew install php72
我装的7.2 的版本:
关闭终端,在执行 php -v 就可看见是 最新安装的 7.2 版本
@@2. 命令行 和 工具
--------------- 创建 h-w php项目
pwd 看文件路径
php php文件 命令运行
服务器 查看:php -S localhost:3000
@@3.php 配置修改
http://localhost:3000/phpinfo.php
##2.初识别 php
-----------------------初始化 php 和html 结合
@@1. php 注释
//认识 php (单行注释)
/**
* 多行注释
*/
@@2.php 变量
$变量名 : 变量名区分大小写 ,不能以数字开头
------------------php 变量的使用 图
@@3.php 字符串 操作
---------php 字符串 操作 图 ,基本跟java一样
单字符串: “sss” ,’sss‘
多行字符串(Heredoc): <<< LLllwe
we2323
232323;
@@@3.1 去掉多余的空格trim函数
<?php
$email=" zhang-rong@hotmail.com ";
var_dump(
$email,
trim($email), //去掉字符串所有的空格
ltrim($email), //去掉字符串左边的空格
rtrim($email) //去掉字符串右边的空格
)
?>
--------------- 输出 结果--图
@@@3.2 字符串 大小写转换 :
strtoupper("aa") //小写转大写
strolower("sE") // 将大写转小写
ucfirst(" how are your doing?") //字符串 首字大写
ucwords("how are your doing?") //字符串 全部首字大写
echo addslashes(“ we' re innnn”) //自动转单引号
echo stripslashes(" We\' re ninghao") //自动转转的 操作显示出来
@@@3.3 从哪里截取到哪里
strstr("zhang-rong@hotmail.com",'@',true )//输出 @hotmail.com ,true不 区分大小写
strrchr(“blog.zhangrong.net”,‘.’) ; //从后往前 找第一个. ,输出 .net
查找指定的字符串,在字符串的第一个位置:
strpos("blog.zhangrong.net",'.') // 输出 4 最前开始查找
strrpos("blog.zhangrong.net",'.') //输出 12 最后开始查找
@@@3.4 字符串替换
str_replace('替换字符串:宁浩',"替换后的文字","操作字符串");
多个替换:
str_replace(array('<title>','<artist>'),array($title,$artist));
<?php
$title="海阔天空";
$artist='Beyond';
$lyric='今天我,寒夜里看雪飘过,怀着冷却了的心窝飘远方。<title> -<artist>';
echo str_replace(array('<title>','<artist>'),array($title,$artist));
?>
##3.php 数组 操作知识
<?php
$tracks=array('张荣','张三','李四','早晚火车');
$tracks[]='海子';
//函数式 ,数组添加数据 (数组名,内容)
array_push($tracks,'文澜','家乡');
//函数式 ,数组移除最后一个数据
array_pop($tracks); //本来最后一个是家乡的,移除之后,只有文澜是最后一个
//函数式 ,数组移除第一个数据
array_shift($tracks);//删除张荣这条数据
//函数式 ,数组移除指定项
unset($tracks[1]);// 移除以后坐标不会变化
//关联数组 类似 java 的map
$album=array(
'title' =>'继续革命',
'release_data' => '1992-07-08',
'artist' => 'Beyond'
);
//嵌套数组
$album_qt=array(
'title' =>'继续革命2',
'release_data' => '1992-07-08',
'artist' => 'Beyond2',
'tracks' => array('张三','李四')
);
//检查关联数组 中是否包含 某项(key)
$result=array_key_exists('artist',$album_qt); //key,数组
if(resule){
echo '包含';
}else{
echo '不包含' ;
}
//检查关联数组 中是否包含 某项(value)
$result_bhvlaue=in_array('继续革命2',$album_qt);//bool值
echo ' , '.$result_bhvlaue;
//判断该值 在那个位置
$result_wz=array_search('继续革s命2',$album_qt);
echo ' , '.$result_wz; //不包含,会输出为空
//对数组进行 排序
$some_numbers=[3,6,1,11];
//排序数组,排序方式(SORT_NUMERIC数字,SORT_STRING字符串)
sort($some_numbers,SORT_NUMERIC); //升序
rsort($some_numbers); //降序
asort($some_numbers); //索引坐标 不变的降序排序
arsort($some_numbers); //索引坐标 不变的升序排序
ksort($some_numbers); //升序,字母排序
krsort($some_numbers); //倒序,字母排序
//控制指针
current($album_qt);//获取当前指针位置
next($album_qt);//指针移动到下一个位置
prev($album_qt);//指针移动到上一个位置
end($album_qt);//指针移动最后一个位置
reset($album_qt);//指针移动第一一个位置
each($album_qt);//查看当前指针的内容
//函数处理数组中的每一项
array_walk($album_qt,function(&$value,$key){
$value='#'.$value;
});
//数组的并集,交集,差集
$a=['苹果','机子'];
$b=['苹果','西瓜'];
array_merge($a,$b);//并集
array_unique(array_unique($a,$b));//去重
array_intersect($a,$b);//交集
array_diff($a,$b);//注意前后,差集 这次输出机子
array_diff($b,$a);//注意前后,差集 这次输出西瓜
var_dump(
);
echo '<pre>';
var_dump(
$tracks,
$album,
$album_qt,
$some_numbers
);
echo '</pre>';
//输出关联数组 的值
echo $album['title'];
//输出嵌套数组中的数据
echo $album_qt['tracks'][1];
##4. php 流程控制语句
<?php
/*
* 流程控制语句
*/
$user_name='张荣';
$user_role='admin';
$is_login=true;
//if 语句
if($is_login){
echo '你好:'.$user_name;
}else{
echo '请先登录...';
}
//if,elseif , else 语句
if($is_login && $user_role==='admin'){
echo '你好管理员:'.$user_name;
}elseif($is_login){
echo '你好:'.$user_name;
}else{
echo '请先登录...';
}
//switch 语句
$rate=7.3;
switch ($rate) {
case $rate>8:
echo '还不错的好电影';
break;
case $rate>5:
break;
case $rate>6:
echo '挺一般的,看看就行了';
break;
default:
echo '浪费时间,还是别看了';
break;
}
//while 循环语句
$number=10;
while($number>=1){
echo '<br>'. $number . '<br>';
$number=$number-1;
}
//for循环
for($i=0;$i<10;$i++){
echo 'for值:'.$i.'<br>';
}
//foreach 循环
//遍历一般数组
$tracks=array('长成','农民','不可说','想怎么样');
foreach($tracks as $item){
echo $item . '<br>';
}
//遍历关联数组
$abc=array(
'a'=>'a的值',
'b'=>'b的值',
'c'=>'c的值'
);
foreach($abc as $key => $value){
echo $key .':'.$value.'<br>';
}
##5.表单,会话
##6.函数和 数据库
&&=====1. 函数
<?php
/**
* 函数操作专用类
*/
//定义函数(无参)
function say_hello(){
return '您好';
}
//定义函数(带参)
function say_hello_cs($name){
return '您好'.$name;
}
//使用函数
echo say_hello();
// echo say_hello_cs('zhangrong');
//定义操作函数
function say_list($listData,$layout='ul'){
if(is_array($listData)){
$lists='';
foreach($listData as $item){
$lists .='<li>'.$item.'</li>';
}
return "<$layout> $lists</$layout>";
}
return '请提供数据类型的数据';
}
$tracks=array("杨志","想你了","惦记你的人:荣");
echo say_list($tracks,'div');
//指定参数的函数
function make_link($attributes=array()){
return '<a href="" '.$attributes['url'].'">' .$attributes['title'].'</a>';
}
echo make_link(array('url'=>'http://zhang-rong.com','title'=>'宁皓网'));
//全局变量和局部变量
$title='继续革命';
function get_title(){
global $title;//处理全局变量,使函数能使用
$lable='专辑名称';
return $title;
}
echo get_title();
&&=====2. 数据库
<?php
// $link=mysqli_connect(
// 'qdm222582463.my3w.com',
// 'qdm222582463',
// 'ZjM99999',
// 'qdm222582463_db'
// );
// if(!$link){
// printf("不能连接到数据库:".mysqli_connect_error());
// exit;
// }else{
// echo '数据库连接成功!'.'<br/>';
// }
try {
$db_op=new PDO('mysql:host=qdm222582463.my3w.com;dbname=qdm222582463_db;port=3306;charset=utf8',
'qdm222582463','ZjM0099999');
//## 执行一个 sql
$statement=$db_op->prepare(
'INSERT INTO php_posts(title,content) VALUES (?,?)'
);
//插入数据
$title='php插入数据';
$content='php插入的内容';
$statement->bindParam(1,$title);
$statement->bindParam(2,$content);
//执行sql
$statement->execute();
//## 执行一个 sql 指定占位符的
$statement_two=$db_op->prepare(
'INSERT INTO php_posts(title,content) VALUES (:title,:content)'
);
//插入数据
$title_two='占位,php插入数据';
$content_two='占位,php插入的内容';
$statement_two->bindParam(':title',$title_two);
$statement_two->bindParam(':content',$content_two);
//执行sql
$statement_two->execute();
//## 执行一个 sql 用关联数组来处理绑定
$statement_two=$db_op->prepare(
'INSERT INTO php_posts(title,content) VALUES (:title,:content)'
);
//插入关联数组
$data=[
'title'=>'海上钢琴师',
'content'=>'顶顶顶顶'
];
//执行sql
$statement_two->execute($data);
//## 执行一个 sql 来查询数据
$statement_cx=$db_op->prepare(
'SELECT * FROM php_posts'
);
$statement_cx->execute();//执行查询
$statement_cx->setFetchMode(PDO::FETCH_ASSOC);//统一查询类型
// echo '<pre>';
// //处理查询的数据
// var_dump(
// $statement_cx->fetch(),
// $statement_cx->fetch(PDO::FETCH_NUM),//数字类型
// $statement_cx->fetch(PDO::FETCH_ASSOC), // 关联数组类型
// $statement_cx->fetch(PDO::FETCH_OBJ) //对象类型
// );
// echo '</pre>';
//输出 所有查询的内容
while($row=$statement_cx->fetch()){
echo 'title:'.$row['title'].' ,content:'.$row['content'].'<br>';
}
} catch (PODException $th) {
echo $th->getMessage();
}
##7.面向对象
##8.包管理工具和设计模式
&&1. composer :php 包管理工具
https://getcomposer.org/download/
安装操作:
进入到桌面,命令行,执行
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === '48e3236262b34d30969dca3c37281b3b4bbe3221bda826ac6a9a62d6444cdb0dcd0615698a5cbe587c3f0fe57a54d8f5') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"
执行成功:会在桌面有一个composer.phar 文件
通过php composer.phar 可运行命令,然后将这个文件添加到系统的目录:
------------------操作图
echo $PATH
sudo mv composer.phar /usr/local/bin/composer
&&2.安装动态依赖包:
官网:packagist.org ,在里面进行搜索
https://packagist.org/packages/monolog/monolog
如:项目执行:composer require monolog/monolog 这样安装
安装之后,会在项目新增vendor文件夹,和composer.lock文件
&&3. 设计模式
详情看 php-demo的代码
&&4.图片杂记
二、laravel方面
##1.路由和控制器
&&1.laravel 的安装
通过 Composer 安装 Laravel 安装器:composer global require "laravel/installer"
配置环境变量:
vim .bash_profile
添加:
// #laravel 路径
export PATH=$PATH:/Users/zhangrong/.composer/vendor/bin
生效:source .bash_profile
项目创建:laravel new laravel-5-demo (laravel-5-demo为项目名称)
运行项目:进入到创建的项目,php artisan serve
Laravel development server started: <http://127.0.0.1:8000>
打开http://127.0.0.1:8000 ,启动完成
&&2.路由使用
----------------简单定义路由
Route::get('/', function () {
return view('welcome');
});
//movie 相关接口
Route::get('movie', function () {
return '获取电影列表';
});
Route::put('movie', function () {
return '修改电影...';
});
Route::post('movie', function() {
return '发布电影...';
});
Route::delete('movie', function() {
return '删除电影...';
});
//自定义请求方法
Route::match(['get', 'post'], 'moviediy', function () {
return 'get和post都行的自定请求方法';
});
//所有请求方法都能用
Route::any('movieAny', function () {
return '所有方法都能用:电影';
});
//带参数的接口
Route::get('movie/{id}', function($id) {
return '电影'.$id;
});
//带多个参数(可空的)接口 (movie_id? 加问号代表可空)
Route::get('movie/{id}/rew/{movie_id?}', function ($id,$movie_id=null) {
return '电影'.$id.'里面的影评'.$review_id;
});
//对参数进行限制的接口
Route::get('movie/{id}/rewew/{movie_id?}', function ($id,$movie_id=null) {
return '电影'.$id.'里面的影评'.$review_id;
})->where(['id'=>'[0-9]+','movie_id'=>'[0-9]+']); //参数只能是数字
//重定向接口
// //自定可重定向的名称 :login 方法一
// Route::get('users/login', ['as'=>'login',function () {
// return '用户登录:方法一';
// }]);
// //自定可重定向的名称 :login 方法二
Route::get('users/profile', function() {
return '用户登录:方法二';
})->name('login');
Route::get('users/profile', function () {
//使用重定向
return redirect()->route('login');//login是重定向的方法名称
});
//一组接口
Route::group(['prefix' => 'groupName'], function() {
//prefix 代表前缀 groupName为访问的组名如:http://127.0.0.1:8000/groupName/*
Route::get('user', function() {
return '组中接口一:管理用户';
});//访问:http://127.0.0.1:8000/groupName/user
Route::get('content', function() {
return '组中接口二:管理内容';
});//访问:http://127.0.0.1:8000/groupName/content
});
&&2.控制器
##2.视图和模板
&&1.视图
//做视图操作
Route::resource('myview', 'ViewController@showView');
if(view()->exists('view.mylist')){
return view('view.mylist',[
'title'=>'电影列表', //传递的数据
'notifications'=>'5'
]); //方式一
// return view('view.list')->with('title','电影列表'); //传递数据 方式二
//方式 三:通过 ComposerServiceProvid 中boot 来进行数据绑定
//使用继承布局
// return view('view.sun_master');
}
&&2.模板
@extends('layout.master') //layout 下面的 master.blade.php 文件
@section('title',$title) // 头部数据
//子类,重写父类的 head方法
@@section('head')
@parent //加上保留父类的关键字 ,有两个链接,不加,就只有重写的子类链接
<link rel="stylesheet" href="movie-page.css">
@endsection
//镶入其他模板
@@include('layout.head',['name'=>'data'])
@section('content') //view 数据
<h1> {{$title}} </h1> //php传递的数据
<h1> @{{$title}} </h1> //不使用php传递的数据,使用js传递的数据 在前面加@
<h1> {{$title or '小张'}} </h1> //非空判断,空显示后面的默认值
<h1> {!! $title !!} </h1> //不转换内容 ,直接显示title为html的内容,使用{!! html文本 !!}
//条件控制指令
@if(false)
<p>你好,你好,你好</p>
@elseif ($false)
<p>hao,好,好</p>
@else
<p>hao111,好111,好111</p>
@endif
//也支持 @for @foreach @while
@foreach ( $listData as $item )
<li>{{ $item }}</li>
@endforeach
@each('view.item', $listData, 'item', 'view.empty')
@endsection
##3.数据库和token身份验证
后端拓展学习:
系统了解laravel :
https://www.codecasts.com/learn/laravel
----------------------------------- 待完善