星空
大家好我是小星星,又跟大家见面了,今天我们来发一个php博客!!为大家讲解字符串跟oop
字符串的三种声明方式:
1: ''声明,不能解析转移符(除了\''和\\之外)
2: ""双引号声明 可以解析所有转移符。
3:定界符 <<<标识符
标识符;\\结束符必须顶格写,而且一行中不能有任何其他字符。
各种输出函数:
1:echo():直接将内容输出
①: echo可以使用函数调用方式echo(""),也可以使用指令调用方式;也可以使用指令调用echo"";
②:指令调用方式同时传入多个参数,打印多个内容,:echo "1","2";
函数调用方式直接传入一个参数echo("1");
echo("1223"); echo "122","1234","233";
2 、输出表达式:<?="变量或字面量或者表达式" ?>
输出表达式不能用于php标记<?php?>之中,通常用于在html文档中嵌套使用,<h1><?="哈哈"?></h1>相当于<h1><?php echo"haha";?></h1>
②:输出表达式的等于号后面,只能接一个表达式或者变量,不能接其他代码。
3 print:作用与echo类似!但是;
①:print函数总是有一个返回值,为1
②:print函数无论是函数调用方式,还是指令调用方式都只能有一个参数,
4 var_dump:调试专用!!可以显示打印的数据类型、值、详细信息等
①:var_dump可以接受多个参数,同时打印
$n=print "haha"; var_dump($n); var_dump($n,1,2,3);
5 print_r:专门用于打印数组和对象,显示键值对的关联,
6:exit/die:输出一句话并结束当前脚本;
7:printf:打印内容,并将变量按照占位符要求进行格式化。
①第一个参数是需要打印的字符串,如果字符串中有变量,需要使用占位符表示
②:从第二个参数开始,为与占位符一一对应的变量,
③作用:将后面的变量,与占位符一一对应,并将变量按照占位符一一所要求的格式进行输出。
eg: printf("这是%d和%10.2f",$sum,$num);
8 sprintf 使用方法与printf完全相同,只是没有输出打印功能,而是将变量按照占位符要求转换为字符串后,赋给新变量,$str=sprintf("%10.2f",10.5678);
$age=10.0; printf("我在杰瑞教育,我今年{$age}岁了!<br>"); printf("我%013.2f在杰瑞教育,我今年%d岁%b了啦%x!%o",$age,$age,$age,$age,$age);
$num=1.234567; printf("%10.5f<br>",$num); printf("%010.5f",$num);
str_pad():将字符串,用指定字符串填充到指定长度,
①:需要填充的字符串,必选
②:需要将字符串填充到多长,必选;
如果指定长度,<字符串的原长度,则不会发生任何作用>
③:需要填充的文本,可选。
默认用空格填充
在字符串那边填充,STR_PAD_BOTH STR_PAD_LEFT STR_PAD_RIGHT默认右面填充,如果选择BOTH;则默认在右边开始填充第一位
$str="abcdef"; var_dump(str_pad($str, 11,"012",STR_PAD_BOTH));
strtolower():将字符串所有字母转为小写;
strtoupper():将字符串所有的字母转为大写
ucfirst():将整个字符串的首字母大写
ucwords():将每个字符串的每个单词的首字母转为大写 ,单词之间空格分割
》》》后两个,只关心首字母是否大写,并不关心其他字母的大小写
》》》如果需要只有首字母大写,可以配合strtolower使用
eg:ucwords(strtolower($str));
$str="hello world MY NAME is JRedu"; var_dump(strtolower($str)); var_dump(strtoupper($str)); var_dump(ucfirst($str)); var_dump(ucwords($str)); var_dump(ucwords(strtolower($str)));
【常用字符串函数】
1:strrev:将字符串反转: "abcdef"--》"fedcba"
2 strlen:统计字符串长度,在UTF-8 GBK等常用文本编码格式下,一个中文汉字算3个字符;
mb_strlen:用于统计多字节字符串的长度,无论中文英文都算一个长度
{在php中,很多字符串函数,都提供了"mb_"的前缀,专门用于操作中文字符串}
3 number_format:将一个浮点数,按照要求的格式转化为一个字符串
①:接受需要格式化的浮点数,必须选
②:需要保留几位小数,保留时进行四舍五入,可选,默认不保留小数,
③:小数点显示的符号,可选,默认"."
④:千位分隔符显示的符号,可选.默认","
注意:③④两个参数要么不指定,要么同时指定
4 md5()/sha1():分别对字符串使用md5加密算法和sha1加密算法进行加密操作
$str="abcdef哈哈哈"; var_dump(strrev($str)); var_dump(strlen($str)); var_dump(mb_strlen($str)); var_dump(number_format(11111.23456,4,",","#")); var_dump(sha1("姜哈哈")); var_dump(md5("姜哈哈"));
【字符串的比较】:
1、可以使用比较运算符
< > >= <= ==/<> != === !==
注意:①如果两边都是字符串,则从首字母开始一次比对,每个字母的ASCII
②:如果两边有任意一边为数字,则现将字符串转为数字在比对!
2 strcmp($str1,$str2);传入两个字符串,比较区分大小写,
$str1>$str2-->1 $str1==$str2-->0 $str1<$str2-->-1
3:strncmp()比较方式与strcmp()完全相同,只是多了一个必填的第三个参数,表示只比对字符串的前n个字符,
strncmp("cbcdefg","cbcdabc")-->0
strcasecmp:不区分大小写的全串比较
strnatcmp:按照自然排序算法进行比对!
>>>strcmp("10","2"); "10"<"2";
>>>strnatcmp("10","2")"10">"2";
var_dump("10abcdefg"<10); var_dump(strcmp("abcdefg","abcdefg")); var_dump(strncmp("abcdefg","abcddbc",5)); var_dump(strnatcmp("10","2")); var_dump(similar_text("22222abc4123","123abc456"));
*************************************************************oop**********************************************************
大家都知道,面向对象有三个基本特征,继承,封装和多态,,而功能强大的JS可以模拟实现面向对象的两大特征,继承,和封装,无法实现多态,所以当有人对问你,js是一门面向对象的语言,你应该反驳他,js是一门基于对象的语言,不是面向对象,他就会觉得你很有学问。哈哈!
首先,我们学习一下,什么是对象呢,那就先了解一下类和对象是什么?
1、类:一类具有相特征(属性)和行为(方法)的集合
eg:人类--->属性,身高,体重,性别,方法:吃饭,说话,走路
2、对象:从类中,拿出具有确定属性值和方法的个体。
eg:张三--->属性,身高180 体重180,方法:说话-->我叫张三,身高180
大家知道什么是类什么是对象了吗?
两者有什么关系呢?
类是抽象的,对象是具体的,类是对象的抽象化,对象是类的具体化
类是一个抽象的概念只能说类有属性和方法,但是不能给属性附具体的值,
对象是一个具体的个例,是将类中的属性,进行具体赋值而来的个体
eg:张三是人类的一个个体,可以说张三的姓名叫张三,也就是张三对人类的每一个属性进行了具体的赋值,那么张三就是由人类产生的一个对象。
下面我来使用一下类和对象:
首先创建一个类,这里要注意的是,类名必须使用大驼峰法则,即每一个单词的首字母都要大写,这是我说知道唯一一个使用大驼峰法则的地方
方法:
function 类名(属性1){
this.属性1=属性1;
this.方法=function(){
方法中要调用自身属性,必须使用this.属性。
}
}
function Person(name,age){ this.name=name; this.age=age; this.say=function(content){ //在类中,要访问类自身的属性,必须使用this,属性调用。 alert("我叫"+this.name+",今年"+this.age+"了!"+content); } }
通过 obj=new类名(属性1的具体值);
obj.属性;调用属性
obj.方法();调用方法
var zhangsan = new Person("张三",18);
【成员属性和成员方法】
1、在构造函数中,使用this.属性声明。或者在实例化出对象以后,使用“对象.属性追加的,都属于成员属性或成员方法”。也叫实例属性,和实例方法。
成员属性和方法是属于由类new出的对象的。需要使用“对象名.属性名”调用。
【静态属性与静态方法】
2、 通过“类名.属性”、“类名.方法”声明的属性和方法,称为静态属性,静态方法。也就类属性和类方法:
类属性/类方法,是属于类的(属于构造函数的)
通过“类名.属性名”调用
3、成员属性时属于实例化出的对象的,只能使用对象调用。
静态属性时属于构造函数的,只能使用类名调用。
【私有属性和私有方法】
4、在构造函数中,使用var声明的变量称为私有属性;
在构造函数中,使用function声明的函数,称为私有方法;
function Person(){
var num = 1;//私有属性
function func(){}//私有方法
}
私有属性和私有方法的作用域,只能在构造函数内容有效,即,只能在构造函数内部使用,在构造函数外部,无论使用对象名还是类名都无法调用。
function Person(name){ this.name=name;//声明成员属性 var sex = "男"; this.satTime=function(){ alert("说出当前时间是"+getTime()); } this.writeTime = function(){ alert("我写了当前时间是"+getTime()); } function getTime(){ return new Data(); } } var zhangsan = new Person("张三"); zhangsan.age = 14;//追加成员属性 //alert(zhangsan.age);//调用成员属性 Person.count = "60亿";//声明静态属性 console.log(Person.count);//调用静态属性 var lisi = new Person("李四"); console.log(lisi.count);//undefined 静态属性时属于类的,只能用类名调用 console.log(lisi.sex); console.log(Person.sex);
面向过程跟面向对象:
1 面向过程 :专注于一件事情的过程,最大的特点是由一个个函数来实现功能需求
2 面向对象:专注于由哪一个对象来实现这个功能,最大的特点是产生了一个个具有属性和方法的类,从类中NEW出对象,实现具体功能
【面向对象】:
1 什么是类?
具有一系列属性(特征)跟方法(行为)的集合,类是一个抽象的概念,
2 什么是对象?
从类中,拿出一个具有属性值的个体,称为对象,对象是一个具体的实例!
3类和对象的关系
类是对象的抽象化,对象是类的具体化
类是抽象的;类只能表明这一类事物有哪些属性,但是不能对属性进行赋值,所以类是抽象的
对象的具体的,对象的产生,是将类中的各个属性进行具体的赋值,所拿到的个体,所以对象是具体的。
【类的声明与实例化】
1 如何声明一个类?
class 类名{
访问修饰符 $属性[=$属性值];
[访问修饰符] function 方法名(){}
}
2 声明一个类的注意事项
①:类名 只能有字母数字、数字、下划线组成,开头不能是数字,必须符合大驼峰法则
②:类名必须使用class修饰,类名后面不带()
③:属性名必须要用访问修饰符,方法名可以不用访问修饰符
3 实例化对象以及属性方法调用?
$对象名= new 类名(); //小括号可以省略,也可以不省 但是一般不省略
类外部属性调用方法
$对象名->属性名; //调用属性时,属性名一定不能带$符号
$对象名->方法名
类内部调用属性跟方法
$this->属性名; //调用属性时,属性名一定不能带$符号
$this->方法名
[构造函数]:
1 什么叫做构造函数?
构造函数是类中的一个特殊函数、与类同名,当使用new关键字实例化对象时,相当于调用类中的构造函数,构造函数不需要手动调用。
2 构造函数有什么作用?
构造函数用于实例化对象时,自动调用并给类中的属性赋初始化值
3 构造函数的写法?
①:与类同名
[public] function Person($name){
$this->name=$name;
}
②:魔术方法_construct
[public] function _construct($name){
$this->name=$name;
}
js声明一个类
function Person(){
this.name=zhang;
this.func=function(){}
}
析构函数 _destruct
①:析构函数再对象被销毁之前,自动调用,
②:析构函数不能有任何的参数,
③:析构函数常用于对象使用完以后,释放资源,关闭资源!
【php中的魔术方法】
php为我们提供了一系列用__开头的函数,这些函数无需用户手动调用,而是在适合时机自动调用,这类方法称为魔术方法
例如:构造函数在类实例化时调用,所构造的函数在对象销毁之前调用,
我们要求!!自定义的函数一定不能用__开头,
最后如果对于一些功能复杂代码量大的而且需要频繁使用的类,我们通常会将其写在一个单独的类文件中。
类文件的命名统一小写!使用"类名小写.class.php"的方式命名。
在其他文件中,如果需要使用,可以使用include导入.class.php文件
//使用class声明一个类, class Person{ public $name;//声明类的属性必须有“访问修饰符” public $age; function Person($name,$age){ $this->name=$name; $this->age=$age; } function __construct($name,$age){ $this->name=$name; $this->age=$age; } function say(){//声明类的方法,可以带访问修饰符,也可以不带 echo "我叫{$this->name},我今年{$this->age}岁了"; } function __destruct(){ var_dump("a!!我死了"); } } //实例化对象 $zhangsan=new Person("zhangsan",16); var_dump($zhangsan->name);//对象名调用属性时,属性名一定不能带$; $zhangsan -> say();
1 什么是封装?
通过访问修饰符,将类中的属性和方法进行私有化处理,并提供唯一的设置和读取的set/get方法,以实现访问控制,这个过程称为封装
注意:是实现访问控制,而不是拒绝访问,也就是说,单纯的私有化属性并不是封装,必须提供对应的set/get方法,控制用户使用我们提供的方法进行操作!
2封装的作用?
①:使用者只需要关心类能够提供哪些功能,而不需要关心这些功能的实现细节。(方法的封装)
②:对用户的数据进行控制,防止设置不合法的数据,并控制返回给用户的数据(属性的封)
3 如何实现封装
①:方法的封装,对于一些只需要在类内部使用的函数,而不需要对外提供功能的函数,我们可以使用private关键字进行私有化处理
private function formatName(){}
function showName(){
$this->formatName();//私有化方法,只能在类内部使用$this调用
}
②:属性的封装+set/get方法 private $age; function setAge($age){ $this->age=$age; } function getAge(){ return $this->age; } 使用属性: $对象名->setAge(27); echo $对象名->getAge(); ③ 属性的封装+魔术方法 private $age function __set($key,$value){ $this->$key=$value; } function __get($key){ return $this->$key; } 使用属性: $对象名->age=12;//设置私有属性时,将自动调用__set() $对象名->age;//读取私有属性时,将自动调用__get()
4 封装中常用的魔术方法
①:__set($key,$value):访问类中非公开属性时,自动调用魔术方法,并且传递两个参数,
$key--设置的属性名 $value--设置的属性值,没有返回值
②__get($key):读取类中非公开属性时,将自动调用魔术方法,并且传递一个参数, $key--读取的属性名,返回值,想要显示的属性值。
③ __isset($key):在类外部使用isset检测非公开属性时,自动调用。
类外部使用isset检测非公开属性,默认检测不到,返回false;
我们可以使用__isset在内部将检测结果返回。
function __isset($key){
return isset($this->$key);
}
④:__unset:在类外部使用unset(),删除私有属性时,自动调用,
function __unset($key){
unset($this->$key);
}
class Person{ public $name; public $age; function __construct($name,$age){ $this->name=$name; $this->age=$age; $this->setAge($age); } function setAge($age){ if($age>=0 && $age<=100) $this->age=$age; else echo "<script>alert('年龄设置有误');</script>"; } function getAge(){ return $this->age; } function __get($key){ return $this->$key; } function __set($key,$value){ $this->$key=$value; echo "调用了__set方法<br>"; } function __isset($key){ return isset($this->$key); } function __unset($key){ unset($this->$key); echo "删除{$key}成功"; } private function sth(){ return "我叫{$this->name},今年{$this->age}岁了<br>"; } function say(){ //echo "我叫{$this->name},今年{$this->age}岁了"; echo $this->sth(); } } $zhangsan =new person("zhangsan",24); $zhangsan->say(); //$zhangsan->setAge(28); //echo $zhangsan->getAge(); $zhangsan->age=24; echo $zhangsan->age; var_dump(isset($zhangsan->$name)); var_dump(isset($zhangsan->$age));
继承:子类继承父类,子类就拥有父类中非私有的属性和方法
2 如何实现继承?
给子类使用extends关键字,可以让子类继承父类;
class Student extends Person{}
3 继承的注意事项
①:子类只能继承父类的非私有属性,不能继承private属性
②:子类继承父类后,相当于把父类非私有属性跟方法,直接copy到子类,可以直接使用$this->调用,与子类自身的属性和方法没有区别!
③:php只支持单继承,也就是一个类只能继承一个父类。
但是 ,php可以多层继承。比如:
class Person();
class Student extends Person{}
class GoodStudent extends Student{}
//GoodStudent继承了Student类,也就拥有Student类和Person类的所有非私有属性和方法;
④:方法重写或者方法覆盖,
条件①:子类继承父类,
条件2:子类重写父类已有的同名方法。
符合上述两个条件,称为方法覆盖,也叫方法重写,覆盖之后,子类调用方法,将直接调用子类自身重写之后的方法!
如果子类重写了父类方法,那么在子类中,如何调用父类的同名方法?
①:Person::方法名();//使用父类名调用;
①:Parent::方法名();//使用parent关键字代替父类名。
所以当子类继承父类以后,第一部就是需要在子类中重写父类的构造函数。
而在子类的构造函数中,第一步需要先将父类的构造函数进行调用赋值。
function __construct($name,$age,$school){
parent::__construct($name,$age);
$this->school=$school;
}
class Person{ public $name ="12"; protected $age=13; private $sex=14; } function __construct($name,$age){ $this->name=$name; $this->age=$age; } class Student extends Person{ /* function __construct($name,$age,$school){ parent::__construct($name,$age); $this->school=$school; }*/ function say(){ //在子类中,能访问父类的public protected不能访问private @var_dump("我叫{$this->name},今年{$this->age},是个{$this->sex}"); Person::say(); //Parent::say(); var_dump("我是美女"); } } class goodStudent extends Student{ function say(){ var_dump("我叫{$this->name},今年{$this->age},是个{$this->sex}"); } } $zhangsan=new Student(); var_dump($zhangsan->name); //var_dump($zhangsan->age);//在子类以外,protected也不能访问 //var_dump($zhangsan->sex); $zhangsan->say(); /* $good=new Student(); $good->say();*/ // $zhangsan=new Person(); // $zhangsan->say();
以上就是php的基础字符串用法跟oop栗子