php基础文档
目录
PHP简介
PHP概述和名词解释
PHP常见数据类型
PHP运算符
PHP流程控制语句
PHP函数
PHP类与对象
PHP会话session与缓存cookie(扩展)
1.PHP简介
PHP,即“PHP:hypertext prerocessor”,是一种被广泛应用的开源通用脚本语言,尤其适用于web开发并可嵌入HTML中去。他的语法利用了C、Java和Perl,易于学习。该语言的主要目标是允许web开发人员快速编写动态生成的web界面,但PHP的用途远不止于此。
2.PHP名词解释
- 基本语法与名词解释
- 变量
- 常量
- 表达式
1)基本语法与名词解释
PHP标记:当PHP开始解析一个文件时,会寻找开始与结束标记,也就是<?php 和 ?>。
这告诉php开始和停止解析二者之间的代码。
此种解析方式使得php可以被嵌入到各种不同的文档中区,而任何起始和结束标
记之外的部分都会被php解析器忽略。
分割符号:php需要在每个语句后用分号;结束指令,需要注意的是必须采用英文输出。
注释方法:php的注释虽然支持C、C++、unit shell风格等的注释方法,但我们仍然保持在
Js中的注释风格即可,其余注释方法暂且不提。
输出方法:echo命令表示输出,而卸载echo后面的代码能够被直接显示出来。
2)变量
描述:变量是其所表示的值可以发生改变的量,
在php中的变量英语歌美元符号后面跟变量名来表示。
语法:$变量名
规则:变量名与php中其他的标签一样遵循相同的规则。
一个有效的变量名由字母或下划线开头,后面跟上任意数量的字母 ,数字,或下划
线。
注意:
- php中的变量名是大小敏感的
- php中的变量可以直接在写出变量名后使用的,而不需要js中的“声明赋值”过程。
- php中的变量之间的赋值总是【赋值传递】,如果必须是【地址传递】则需要使用& 符号。
- php中变量的作用域采用函数级作用域(暂时)。
例子:
$var = ‘frank’;
$Var = ‘iwen’;
echo “$var, $Var”; // 输出 “frank, iwen”
3)常量
描述:常量指在脚本执行期间该值不能改变的标识符。
常量默认为大小写敏感,传统是常量表示符总是大写的。
语法:define(‘常量名’,’简单值’);
规则:常量名和其他任何PHP标签遵循同样的命名规则。
合法的常量名以字母和下划线开始,后面跟着任何字母,数字或下划线。
注意:
- 常量实际上可以认为是【宏定义】在php中的一个体现
- 为了区分变量和常量,我们约定常量在定义时均使用大写。
- Php中实际上并不是所有的常量的值都不能改变,MC(魔术常量)就能够发生改变。
例子:
define('FRANK', '沃德田·辣么帅'); echo FRANK;
4)表达式:
描述:表达式是php中的基石,可以说在php中缩写的任何内容都是表达式。
官方给出的概念是【任何有值的东西均可以称为是表达式】
语法:在php中表达式无法精确的被给出一个语法来设定,但可以简单设立一个通俗的标准。
那就是语句如果不加分号的部分,就是表达式。
注意:
上面的说法并不完全准确,毕竟有一些语句是不使用分号结尾的。
例如流程控制中的if等结构,还有函数等结构。
因此上面的说法只是“简单”设立的一个标准。
例子:
function foo (){return 5;} //函数表达式 $c = $a++ //赋值表达式
3.php常见数据类型
php中的数据类型相较于js多了很多中,但其中相当一部分对于我们来说鲜少用到。因此我们只在这为大家介绍常见的几种数据类型。
(1)布尔类型:Boolean
(2)整数类型:Integer
(3)浮点类型:Float
(4)字符类型:String
(5)数组类型:Array
(6)对象类型:Object
(7)空值类型:NULL
介绍数据类型之前,为大家提供两个方法来判别变量的数据类型:
var_dump(变量|表达式):函数用来查看表达式的值和归属类型。
gettype(变量|表达式) :函数用来查看变量或表达式的类型。
1)布尔类型
描述:boolean是最简单值类型,用来表示表达式的真值。
语法:一般使用TRUE或FALSE常量来指定布尔值,两者均不区分大小写
注意:
a.可以使用(bool)或(boolean)强制转换修饰符,
来对非布尔值类型的变量或表达式进行强制类型转换。
b.当转换为布尔值类型时,以下值被认为是FALSE
布尔值 FALSE 本身
整型值 0(零)
浮点型值 0.0(零)
空字符串,以及字符串 "0"
不包括任何元素的数组
特殊类型 NULL(包括尚未赋值的变量)
c.所有其它值都被认为是 TRUE(包括任何资源 和 NAN)
强调:
-1 和其它非零值(不论正负)一样,被认为是 TRUE
2)整数类型integer
描述:整数指的是集合 ℤ = {..., -2, -1, 0, 1, 2, ...} 中的某个数
语法:
a.整型值可以使用十进制,十六进制,八进制或二进制表示,前面可以加上可选的符号(- 或者 +)。
b.二进制表达的 integer 自 PHP 5.4.0 起可用。
c.要使用八进制表达,数字前必须加上 0(零)。
要使用十六进制表达,数字前必须加上 0x。
要使用二进制表达,数字前必须加上 0b。
注意:
- PHP7以前的版本,如果向八进制数传递了一个非法数字(即8 或9),则后面其余数字会被忽略。PHP7以后,会产生 Parse Error错误
- PHP 中没有整除的运算符。1/2 产生出 float 0.5。
- 使用(int)或(integer)方法对非整型变量或表达式进行强制类型转换
强调:
绝不要将未知的分数强制转换为 integer,这样有时会导致不可预料的结果。
3)浮点类型float
描述:浮点类型,又被称为浮点数Float或者双精度数double或者实数real。
语法:可以通过一下任何一种类型来定义
$a = 1.234;
$b = 1.2e3;
$c = 7E-10;
注意:
- 永远不要直接比较两个浮点数的大小,因为这样没有任何意义
- 如果必须比较浮点数大小,则可以采用【epsilon】机器极小值方式进行比较。
- NAN表示数学上无法用浮点数具体描述出的数字,和true之外的任何值进行松散或严格比较的结果都会是false。
强调:
由于 NAN 代表着任何不同值,不应拿 NAN 去和其它值进行比较,包括其自身 。
4)字符类型
描述:字符类型也叫字符串类型,是由一系列字符构成。
其中每一个字符等同于一个字节,因此php中只能支持256字符集,
也正因为这样其不支持Unicode。
语法:php中字符串有两种定义语法,单引号和双引号定义。
注意:
- php字符串中使用转义字符\来描述容易引起歧义的内容
- php对双引号定义的字符串中的变量可以进行内容解析,而单引号则不行。
- php字符串允许多行定义,但会忽略多余的空格和换行。
- php中字符串拼接采用.点运算符实现!不是+加号!!!!!!!
例子:
$frank = '张先森'; echo 'my name is $frank'."<br/>"; echo "my name is $frank";
5)数组类型Array
描述:php中的数组实际上一个有序映射,映射就是把keys关联到values上的类型。
语法:
array( key => value , ... )
// 键(key)可是是一个整数 integer 或字符串 string
// 值(value)可以是任意类型的值 。
自php5.4起,可以直接通过短数组定义方式[]来替代array()。
注意:
- php中echo仅用来输出简单值,而复杂数据类型则需要通过print_r()函数来输出
- php中的数组实际上更相似与js中的对象结构。
- php中数组的读取和赋值可以通过数组名[键名]方式来读写。
- php中数组的长度读取通过count()函数实现
- php中数组内部添加原本并不存在的key值,不会补齐之间的差值,而是仅添加当前新输入的key值。例:$arr[100] = 100.并不会为数组添加100个元素
例子:
print_r($frank = ['11','22','33']); print_r($frank[0]); $frank[100] = 960; print_r($frank); echo count($frank);
6)对象类型object
描述:php中想要创建一个对象,则必须通过new语句实例化一个类得到。
语法:$obj = new Func;
注意:
- php中类由class关键字声明,类名后没有小括号。
- php中类内部的方法由->箭头来调用,而不是.点运算符。
例子:
class Peo{ function eat(){ echo '我会吃饭'; } } $frank = new Peo; print_r($frank->eat());
补充:对于类和对象的使用方法远不止如此,而在数据类型当中我们只需要知道
对象类型是如何创建的即可,剩余部分会在类和对象中详细说明。
7)空值类型NULL
描述:NULL表示变量未被赋值的状态,NULL类型唯一可能的值就是NULL。
注意:NULL值不区分大小写,NULL或null都可以
例子:
var_dump($frank = NULL);
4.php运算符
php中运算符和js中的运算符大同小异,因此整体上来讲可以直接按照经验进行使用。但毕竟存在差别,因此列出两个明显的运算规则区别:
(1)字符串的拼接符号不再是+加号运算符,而是.点运算符。
(2)字符串内的+=运算符号也不再表示拼接,而是使用.=来进行拼接。
原本的+=仅用来单纯的数学运算累加。
$str1 = '123'; var_dump($str1+= '456');//int(579) $str1 = ‘123’; var_dump($str1.= '456');//string(6) "123456"
5.php流程控制语句
php中流程控制语句与js中的流程控制语句语法基本一样,可以直接使用。
php中不但包括了js中原有的语句,还新添加了一些流程控制:
(1)快速遍历不再是for-in结构,而是提供了一个foreach语句
(2)文件引入语句include和require, 文件的单次引入语句include_once和require_once
1)foreach快速遍历
描述:foreach 语法结构提供了遍历数组的简单方式,foreach 仅能够应用于数组和对象。
如果尝试应用于其他数据类型的变量,或者未初始化的变量将发出错误信息。
语法:
foreach (array_expression as $value) { statement }
或者
foreach (array_expression as $key => $value) { statement }
注意:
a.第一种格式遍历给定的 array_expression 数组。每次循环中,
当前单元的值被赋给 $value 并且数组内部的指针向前移一步
(因此下一次循环中将会得到下一个单元)。
b.第二种格式做同样的事,只除了当前单元的键名也会在每次循环中被赋给变量$key。
例子:
$arr = [1,2,3,4,5]; foreach ($arr as $index => $value) { echo '$arr['.$index.']:'.$value."<br/>"; }
2)include和require
描述:include和require 语句都表示包含并运行指定文件。
但未找到文件include会发出一条警告,后者会发出一个致命错误
语法:
include ‘文件名|文件路径';
注意:
a.当一个文件被包含时,其中所包含的代码继承了 include 所在行的变量范围。
从该处开始,调用文件在该行处可用的任何变量在被调用的文件中也都可用。
b.不过所有在包含文件中定义的函数和类都具有全局作用域。
例子:
vars.php <?php
$color = 'green';
$fruit = 'apple'; ?> test.php <?php
echo "A $color $fruit"; // A
include 'vars.php';
echo "A $color $fruit"; // A green apple ?>
6.php函数
php中的函数结构和js中的函数结构基本持有相同的语法结构和特征。
例如:
函数的声明语法由function命令声明,
函数参数写在小括号内部,
函数返回值在函数内部采用return关键词声明,
函数可以先使用后声明
函数内部返回的函数(闭包)
php中的作用域也采用函数级别,因此函数内部的变量无法在函数外部直接访问。
但php中函数的作用域部分与js中的函数还是存在一些区别的。
例如:
在函数外部定义的全局变量并不能在函数内部直接使用,
而是需要通过关键词global在函数内部再次声明才可以。
例如:
$num = 100; //设置全局变量$num function func(){ global $num; //在函数内部声明$num为全局变量,否则调用出错 echo $num; //输出结果为100,证明访问成功 $num++; //对全局变量做出修改 } func(); echo $num; //在函数外部再次输出$num,得出结果101
通过上面的例子得出:
在php的函数中如果想要使用哪怕是全局变量,也必须采用关键词global声明一次。
否则无法生效。
7.php类与对象
php中和javascript不同,php内对于类和对象是有准确的定义和关键词声明的。
因此暂时撇开目前对类和对象所保留的认知,让我们一起来看看在php中类和对象是如何规定的。
我们从下面几个角度来讨论一下php中的类和对象:
(1)php中的类
(2)php中的对象
(3)php中类的属性与属性类型关键词
(4)php中的类常量与静态变量
(5)php中类的构造函数
(6)php中的继承
1)Php中的类
描述:php中类的定义都以关键字 class 开头,后跟类名,再后面跟着一对花括号。
括号内包含有类的属性与方法的定义。
语法:class 类名 { 类内部的结构 }
说明:
a.类名可以是任何非 PHP 保留字的合法标签。一个合法类名以字母或下划线开头,后面跟着若干字母,数字或下划线。
b.一个类可以包含有属于自己的常量,变量【属性】以及函数【即方法】。
例子:
class Peo{ public $peoName = ‘people name’; //public是一个关键词,稍后再说 function showSelf(){ echo 'hello world!'; } }
2)Php中的对象
描述:要创建一个类的实例,必须使用 new 关键字。类应在被实例化之前定义。
语法:$对象名 = new 类名();
说明:
a.对于创建对象的语句中,new后面的类名后有没有小括号都可以。
b.对象与对象之间的传值仍然是赋值传递,只不过传递的内容是一个内存地址。
例子:
class Peo{ public $peoName = ‘people name’; function showSelf(){ echo 'hello world!'; } } $frank = new Peo;//Peo Object ( [peoName] => people name ) print_r($frank);
3)php中类的属性与属性类型关键词
描述:类内部的变量成员称为属性,或字段、特征。
语法:由关键字public,protected或者private开头,然后跟一个普通的变量声明来组成。
class 类名{
属性关键词 $变量名(属性名) = 属性值;
属性关键词 function 方法名 (参数1,参数2,…){ 方法内容代码; }
}
说明:
a.属性中的变量可以初始化,但初始化的值必须是常数。
b.类的属性和方法如果没有写明类型关键词,则都默认是公有
public:被定义为公有的类成员可以在任何地方被访问。
protect:被定义为受保护的类成员则可以被其自身以及其子类和父类访问。
private:被定义为私有的类成员则只能被其定义所在的类访问。
c.在类的成员方法中,可以用->来访问非静态属性,其中->称为对象运算符
例子:
class Peo{ public $peoName = ‘people name’; //声明公有属性 private function showSelf(){ //声明私有方法 echo 'hello world!'; } public function canUsedFunc(){ //声明公有方法 $this->showSelf(); //$this是一个伪对象,表示 } // 当前正在调用这个方法的对象 } $frank = new Peo(); //实例化一个Peo类的对象 echo $frank->peoName; //通过->访问对象的公有属性 $frank->peoName = ‘Frank’; //修改对象的公有属性 echo $frank->peoName; $frank->canUsedFunc(); //调用对象的公有方法,间接执行私有方法
4)php中的类常量与静态变量
描述:php中的类常量和静态变量是存在与类结构中的两个不同与常见属性的两种结构。
语法:类常量由关键词const声明,而静态变量则使用关键词static声明
class 类名{
const 类常量(没有$开头) = 简单值;
static 静态变量名(有$开头) = 简单值;
}
说明:
a.由const声明的类常量不允许发生任何改变,一经声明值即固定。
b.由static声明的静态变量的语句,则仅在类被声明的时候执行一次,但可以修改。
c.无论是const声明的类常量还是static声明的静态变量,两者的调用方式均为::调用
d.两者在调用的时候均可以不实例化对象直接通过类名调用。
例子:
class Peo{ const peoName = ‘people name’; //声明类常量 } echo Peo::peoName; //不实例化也能直接通过类名访问 $frank = new Peo(); echo $frank::peoName; //实例化后可以通过对象访问 class Peo{ static $peoAge = 18; //声明静态变量 } echo Peo::$peoAge; //直接通过类名访问 Peo::$peoAge++; //修改静态变量的值 echo Peo::$peoAge; //确认修改 $frank = new Peo(); //实例化对象,但静态变量声明语句不执行 echo $frank::$peoAge; //输出静态变量是刚才修改的值。
5)php中类的构造函数
描述:构造函数是类在实例化对象的时候自动执行,用来帮助类去构造对象的函数。
php为所有的类都提供了一个和类名相同的隐藏构造函数。
可以通过显示编写或通过__construct函数来主动进行编辑。
语法:
class 类名{
//function __construct(){ 主动修改的代码 }
function 类名(){ 主动修改的代码 }
}
说明:两种写法都能够实现构造函数的主动编辑,但是需要知道系统自动提供的是第二中结构
例子:
class Peo{ public $peoName; function __construct(){$this->peoName = '默认值';} } $frank = new Peo(); echo $frank->peoName;
6)php中类的继承
描述:继承有时也被称为类扩展。是指子类会继承父类所有公有的和受保护的属性方法。
在php中使用extends关键词来实现继承。
语法:function SonClassName extends FatherClassName{
子类结构
}
说明:
a.除非子类覆盖了父类的方法,否则被继承的方法都会保留其原有功能。
b.继承对于功能的设计和抽象是非常有用,避免了重复编写大量相同的公有结构
c.对于公有属性和方法的继承,子类可以直接随意使用
对于受保护的属性和方法的继承,可以在【父类或子类内部】使用
对于私有的属性和方法,子类不能够继承。
例子:
class Father{
public $pubPro = '父类公开的属性';
protected $protecPro = '父类受保护的属性';
private $priPro = '父类私有的属性';
public function fatherPublicPut(){
echo $this->pubPro."<br/>";
echo $this->protecPro."<br/>";
echo $this->priPro."<br/>";}
protected function fatherProtectPut(){
echo $this->pubPro."<br/>";
echo $this->protecPro."<br/>";
echo $this->priPro."<br/>";}
private function fatherPrivatePut(){
echo $this->pubPro."<br/>";
echo $this->protecPro."<br/>";
echo $this->priPro."<br/>";
}
}
class Son extends Father{
public function SonSelfPut(){
echo $this->pubPro."<br/>";
echo $this->protecPro."<br/>";
echo $this->priPro."<br/>";
}
}
$father = new Father();
echo $father->pubPro;//父类公开的属性
echo $father->protecPro;//报错,受保护属性外部无法直接访问
echo $father->priPro;//报错,私有属性外部无法访问
$father->fatherPublicPut();//父类公开的属性、父类受保护属性、父类私有属性
$father->fatherProtectPut();//报错,受保护方法外部无法直接访问
$father->fatherPrivatePut();//报错,私有方法外部无法直接访问
$son = new Son();
echo $son->pubPro;//父类公开的属性(继承来的)
echo $son->protecPro;//报错,受保护属性外部无法直接访问
echo $son->priPro;//报错,私有属性外部无法访问
$son->fatherPublicPut();//父类公开的属性、父类受保护属性、父类私有属性(继承来的)
$son->fatherProtectPut();//报错,受保护方法外部无法直接访问
$son->fatherPrivatePut();//报错,私有方法外部无法直接访问
$son->SonSelfPut();//父类公开的属性、父类受保护的属性、报错(证明继承的属性只有public和protected的属性)
8)php绘画session和缓存cookie(扩展)
session和cookie都会是我们在ajax请求部分详细说明的内容。但是我们有必要在这里先对其概念有一个大致的了解,这样有助于更好的理解后面部分的内容。
名词解释:
cookie指的是当访问页面的时,由后台发往前台页面数据时所夹带的一小段信息
session可以理解为一种不断验证口令以获得用户持久连接的“访问机制”
原理说明:
当后台返回给前台数据的时候,添加的一段“持久”的信息。
因此这段信息必须在php后台代码中插入添加。
相关技术:
(1)php中$_GET和$_POST对象,用于在php中获取get和post请求的数据对象
(2)php中time()用于获取当前的时间戳,单位是秒。支持加减法。
(3)php中setcookie('key','value',过期时间); 用于设置缓存
(4)html中document.cookie用来获取页面所保存的cookie值。类型是字符串。
HTML代码:
$('button').click(function (){ $.ajax({
type:"post",
url:"php文件地址",
data:{
username:"frank",
password:"123456"
},
jsonType:"json",
success:function(data){
console.log(data);
}
});
});
PHP代码:
$uname = $_POST["username"];
$upass = $_POST["password"];
if(($uname=='frank')&&($upass=='123456')){
//表示cookie有效时间只能保存20s
setcookie("username",$uname,time()+20);
setcookie("password",$upass,time()+20);
echo '登录成功';
}else{
echo '登录失败';
}
php基础文档的更多相关文章
- HTML&CSS基础-文档声明
HTML&CSS基础-文档声明 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.HTML的发展 1993年6月: HTML第一个版本 1995年11月: HTML2.0 ...
- [java基础]文档注释
转载自:http://blog.163.com/hui_san/blog/static/5710286720104191100389/ 前言 Java 的语法与 C++ 及为相似,那么,你知道 Jav ...
- ElasticSearch基础+文档CRUD操作
本篇博客是上一篇的延续,主要用来将年前学习ES的知识点做一个回顾,方便日后进行复习和汇总!因为近期项目中使用ES出现了点小问题,因此在这里做一个详细的汇总! [01]全文检索和Lucene (1)全文 ...
- 计算机基础 | 文档神器docsify安装及基本使用
为啥要用docsify? 神器Docsify让你的文档变得美观,配合typora,从此爱上看文档,各种优点:小巧.快速.美观.方便.快捷.上手快,可以浏览如下优秀案例 ve-charts pyecha ...
- nginx 基础文档
Nginx基础 1. nginx安装 2. nginx 编译参数详解 3. nginx安装配置+清缓存模块安装 4. nginx+PHP 5.5 5. nginx配置虚拟主机 6. ngi ...
- dubbo基础文档
随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进. 单一应用架构 当网站流量很小时,只需一个应用, ...
- Java 初学者帮助文档以及基础教程
一下午的时间,大致看了一下Java的文档,进一步熟悉了Java的大体框架和结构,整理了一下有用的资源. 帮助文档: JSE 8 API 英文版 在线HTML格式:http://docs.oracle. ...
- HTML结构文档中那些基础又重要又容易被忽略的事?
HTML结构文档中那些基础又重要又容易被忽略的事? 大部分的人,总是会做出这样下意识地判断:简单就是不重要,容易就可以直接忽略掉!其实不然,简有精髓,基石必重,岂能略而不顾!HTML结构文档的编写,可 ...
- 第一百一十三节,JavaScript文档对象,DOM基础
JavaScript文档对象,DOM基础 学习要点: 1.DOM介绍 2.查找元素 3.DOM节点 4.节点操作 DOM(Document Object Model)即文档对象模型,针对HTML和XM ...
随机推荐
- Spark集群安装与配置
一.Scala安装 1.https://www.scala-lang.org/download/2.11.12.html下载并复制到/home/jun下解压 [jun@master ~]$ cd sc ...
- django-URL别名的作用(六)
接include函数那一节. 作用:为url地址取一个名称,这样在html中引用的时候,无论后台url怎么变,都可以访问到对应的界面,可以减少更改的次数. 基本目录: book\urls.py fro ...
- Windows下NFS服务器SFU设置(可以共享linux系统)
一.安装SFU1.下载软件SFU http://download.microsoft.com/download/a/1/c/a1ca7af1-a6e3-46e7-874a-4c5d8c0fb3b7/S ...
- 盘点一下Creator星球上的开源工具包!
晓衡开始写公众号,最早是从上架 Cocos 商店的 pbkiller 插件开始的,到至今有2年2个月了.在这期间,又陆续在公众号上分享了多个实用工具包,在这里统一盘点一下,方便与大家交流学习. 一.u ...
- 命令行代理神器 proxychains
因为某些原因,我们需要在命令行下载一些国外的资源,这个时候如果使用 wget,curl,或者 aria2c 的时候,往往又没有速度.这个时候我们需要使用代理来进行加速. 我本地搭的有 ss,但 ss ...
- Head First设计模式——单例模式
单例模式是所有设计模式中最简单的模式,也是我们平常经常用到的,单例模式通常被我们应用于线程池.缓存操作.队列操作等等. 单例模式旨在创建一个类的实例,创建一个类的实例我们用全局静态变量或者约定也能办到 ...
- DAY 3 数论专场
2019-07-23 今天的题目一个比一个神仙,很早之前就在讨论今天是不是晚上回宾馆就没脑子了,后来发现,是中午.... 一上午就讲了一个PPT,然而标题就两个子---数论... 这谁顶的住....整 ...
- 转:java 看好的一些书
地址 : http://www.cnblogs.com/xrq730/p/4994545.html
- HTMLTestRunner加入logging输出
使用HTMLTestRunner生成html的测试报告的时候,报告中只有console输出,logging的输出无法保存, 如果要在报告中加入每一个测试用例执行的logging信息,则需要改HTMLT ...
- TensorFlow2.0(10):加载自定义图片数据集到Dataset
.caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .label { border: 1px so ...