当前位置:首页 > 文章列表 > 数据库 > MySQL > PHP面试题

PHP面试题

来源:SegmentFault 2023-01-25 19:21:29 0浏览 收藏

对于一个数据库开发者来说,牢固扎实的基础是十分重要的,golang学习网就来带大家一点点的掌握基础知识点。今天本篇文章带大家了解《PHP面试题》,主要介绍了MySQL、面试、数据库、PHP、后端,希望对大家的知识积累有所帮助,快点收藏起来吧,否则需要时就找不到了!

1,&引用(https://www.cnblogs.com/chrdai/p/11061174.html
        在PHP中,将变量

$a = range(1,100000);
var_dump(memory_get_usage()); // int(6698184)

$b = $a;
var_dump(memory_get_usage()); // int(6698184)

$a = range(1,200000);
var_dump(memory_get_usage()); // int(17184024)

        从上边可以看到,当

$a = range(1,100000);
var_dump(memory_get_usage()); // int(6698208)

$b = &$a;
var_dump(memory_get_usage()); // int(6698208)

$a = range(1,100000);
var_dump(memory_get_usage()); // int(6698208)

        对于引用的变量执行

$a = 1;
$b = & $a;
unset($b);
echo $a;

        对象的引用

class A {
    public $name = 1;
    function getName(){
        echo $this->name;
    }
}
$a = new A;
$b = $a; // $b 与 $a 指向同一个内存空间地址
$b->name = 2;
$a->getName(); // 2

变量引用示例:

$d = ['a', 'b', 'c'];

foreach($d as $k => $v)
{
    $v = &$d[$k];
}

//最终程序执行完成之后 $d 的值是?

        第一次遍历:

function t(&$a)
{
    $a++;
}

$a = 1;
t($a);
echo $a; // 2

        通过引用的形式传递给函数参数,必须是一个变量名,而不能是一个确定的值,否则会报错。

function &t()
{
    static $a = 0;
    $a++;
    echo $a;
    return $a;
}
$b = t(); // 输出:1
$b = 5;
$b = t(); // 输出:2
$b = &t(); // 输出3。$b=3
$b = 5; // $a = 5
$b = t(); // 输出:6

        通过

//官方示例:
class talker{
    private $data = 'Hi';
    public function & get()
    {
        return $this->data;
    }
    public function out()
    {
        echo $this->data;
    }
}
$a = new talker();
$b = &$a->get();
$a->out();
$b = 'How';
$a->out();
$b = 'are';
$a->out();
$b = 'you';
$a->out();

//最终输出:HiHowareare

2,PHP中的 COW ( Copy-on-Write写时复制 ) 机制
        写时复制,即在变量进行写入时,才会复制一份内存,这是内存优化的常用手段。
        在通过变量赋值的方式赋值变量时,不会申请新的内存给新的变量,只是使用一个计数器来共用内存。只有当其中某一个变量的值发生变化时,才会分配新的内存给变量的变量。
        常用场景有:变量的多次赋值;函数的参数传递,并在函数体内修改实参等。

3,静态变量
        静态变量仅在局部函数作用域中存在,且仅在函数第一次执行时创建,当函数执行完毕之后,静态变量的值不会丢失。

function t(){
    static $a = 1;
    $a++;
    echo $a;
}
t(); // 2
t(); // 3
t(); // 4

4,== 与 === 的区别
        两者均用于判断等号前后的值是否相等,区别在于

$a = 0;
$b = '';
var_dump($a == $b); // boolean true
var_dump($a === $b); // boolean false

5,isset 和 empty 的区别

$a = '';
$b = 0;
$c = false;
$d = 1;
$e = '0';
$f = '0.0';
$g = null;
var_dump(isset($m)); // boolean false
var_dump(isset($a)); // boolean true
var_dump(isset($b)); // boolean true
var_dump(isset($c)); // boolean true
var_dump(isset($d)); // boolean true
var_dump(isset($e)); // boolean true
var_dump(isset($f)); // boolean true
var_dump(isset($g)); // boolean false

var_dump(empty($m)); // boolean true
var_dump(empty($a)); // boolean true
var_dump(empty($b)); // boolean true
var_dump(empty($c)); // boolean true
var_dump(empty($d)); // boolean false
var_dump(empty($e)); // boolean true
var_dump(empty($f)); // boolean false
var_dump(empty($g)); // boolean true

6,魔术函数(魔术方法) 魔术方法都必须被声明为

class A {
    function __construct()
    {
        echo '我被自动执行了!';
    }
}
$a = new A;

class B {
    public $name;
    
    public function __construct($name){
        $this->name = $name;
        echo '你的名字是:'.$this->name;
    }
    
    public function __destruct(){
        echo '对象被销毁了';
    }
}

$b = new B('Jeccy');
  • __call($name, $arguments):在对象中调用一个不可访问(方法不存在或被定义为
    class B {
        public $name=22;
        protected function getName()
        {
            echo $this->name;
        }
        function __call($name, $arguments){
            var_dump($name);
            var_dump($arguments);
        }
    }
    
    $b = new B;
    
    $b->getName(1,2); // string 'getName'  Array ( [0] => 1 [1] => 2 )
    $b->getAge(3,4); // string 'getAge'  Array ( [0] => 3 [1] => 4 )
    • callStatic($name, $arguments):在静态上下文中访问一个不可访问(方法不存在或被定义为
      class B {
          public static function __callStatic($name, $arguments)
          {
              echo $name.'
      '; var_dump($arguments); } } $b = new B; B::getAge('static method');// getAge Array ( [0] => static method )
      • __get($name):服务不可访问(不存在或设置为非
        class B {
            private $name = 'jeccy';
            public $age = 2;
            protected $sex = 1;
            public function __get($name)
            {
                echo '属性'.$name.'不存在或不可被访问
        '; } } $b = new B; echo $b->name; // 属性name不存在或不可被访问 echo $b->age; // 2 echo $b->sex; // 属性sex不存在或不可被访问 echo $b->address; // 属性address不存在或不可被访问
        • __set(string $name, mixed $value):在给不可访问的属性赋值时,会被调用。
          class B {
              private $name = 'jeccy';
              public $age = 2;
              protected $sex = 1;
              public function __set($name, $value)
              {
                  $this->$name = $value;
              }
              public function getInfo()
              {
                  echo 'name='.$this->name.',';
                  echo 'age='.$this->age.',';
                  echo 'sex='.$this->sex;
                  echo 'sex='.$this->sex;
              }
          }
          $b = new B;
          $b->name = 'mark';
          $b->age = 3;
          $b->sex = 2;
          $b->address = 2;
          $b->getInfo(); // name=mark,age=3,sex=2,address=2

          *__isset(string $name):当被不可访问属性调用

          class B {
              private $name = 'jeccy';
              public $age = 2;
              protected $sex = 1;
              public function __isset($name)
              {
                  echo isset($this->$name) ? $name.'存在
          ' : $name.'不存在
          '; } public function getInfo() { echo 'name='.$this->name.','; echo 'age='.$this->age.','; echo 'sex='.$this->sex; } } $b = new B; isset($b->name); // name属性存在 isset($b->age); // age属性可以访问,故不会调用 __isset() 方法 isset($b->sex); // sex属性存在 isset($b->address); // address属性不存在
          • _unset(string $name):当对不可访问属性调用
            class B {
                private $name = 'jeccy';
                public $age = 2;
                protected $sex = 1;
                public function __unset($name)
                {
                    unset($this->$name);
                }
                public function getInfo()
                {
                    var_dump($this);
                }
            }
            $b = new B;
            unset($b->name); // name存在
            unset($b->age); // age属性可以访问,故不会调用 __isset() 方法
            unset($b->sex); // sex存在
            unset($b->address); // address不存在
            $b->getInfo(); // D:wamp64wwwmineaa.php:14: object(_B_)[_1_]
            • __sleep():当在类外部对对象使用
              class B {
                  private $name = 'jeccy';
                  public $age = 2;
                  protected $sex = 1;
                  public function __sleep()
                  {
                      return array('sex','age','name');
                  }
              }
              $b = new B;
              echo serialize($b); // O:1:"B":3:{s:6:"*sex";i:1;s:3:"age";i:2;s:7:"Bname";s:5:"jeccy";}

              7,静态属性和静态方法(参考:https://www.cnblogs.com/chrdai/p/6863090.html

              今天关于《PHP面试题》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

版本声明
本文转载于:SegmentFault 如有侵犯,请联系study_golang@163.com删除
gorm一条慢语句分析gorm一条慢语句分析
上一篇
gorm一条慢语句分析
用golang+vue+mysql全栈制作一个博客
下一篇
用golang+vue+mysql全栈制作一个博客
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    542次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    508次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    497次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    484次学习
查看更多
AI推荐
  • 笔灵AI生成答辩PPT:高效制作学术与职场PPT的利器
    笔灵AI生成答辩PPT
    探索笔灵AI生成答辩PPT的强大功能,快速制作高质量答辩PPT。精准内容提取、多样模板匹配、数据可视化、配套自述稿生成,让您的学术和职场展示更加专业与高效。
    14次使用
  • 知网AIGC检测服务系统:精准识别学术文本中的AI生成内容
    知网AIGC检测服务系统
    知网AIGC检测服务系统,专注于检测学术文本中的疑似AI生成内容。依托知网海量高质量文献资源,结合先进的“知识增强AIGC检测技术”,系统能够从语言模式和语义逻辑两方面精准识别AI生成内容,适用于学术研究、教育和企业领域,确保文本的真实性和原创性。
    22次使用
  • AIGC检测服务:AIbiye助力确保论文原创性
    AIGC检测-Aibiye
    AIbiye官网推出的AIGC检测服务,专注于检测ChatGPT、Gemini、Claude等AIGC工具生成的文本,帮助用户确保论文的原创性和学术规范。支持txt和doc(x)格式,检测范围为论文正文,提供高准确性和便捷的用户体验。
    30次使用
  • 易笔AI论文平台:快速生成高质量学术论文的利器
    易笔AI论文
    易笔AI论文平台提供自动写作、格式校对、查重检测等功能,支持多种学术领域的论文生成。价格优惠,界面友好,操作简便,适用于学术研究者、学生及论文辅导机构。
    39次使用
  • 笔启AI论文写作平台:多类型论文生成与多语言支持
    笔启AI论文写作平台
    笔启AI论文写作平台提供多类型论文生成服务,支持多语言写作,满足学术研究者、学生和职场人士的需求。平台采用AI 4.0版本,确保论文质量和原创性,并提供查重保障和隐私保护。
    35次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议隐私政策
返回登录
  • 重置密码