【问题标题】:Which concepts of OOP are not available in PHP哪些 OOP 概念在 PHP 中不可用
【发布时间】:2015-10-20 13:05:50
【问题描述】:

我在网上搜索了很多,但找不到很多人在面试问题或谈论PHP时提出的一般问题的答案..

PHP 中没有哪些 OOP 概念?

我多次听到并读到 PHP 不是一种完全面向对象的语言, 但是当我用谷歌搜索时,我无法找到 OOP 的哪些概念 在 PHP 中不可用。

【问题讨论】:

  • 对于您的问题,这似乎是good answer,您怎么看? Here 是另一个。
  • 我认为这不是 SO 的问题,但无论如何我都有兴趣回答
  • 我一直在学习编程和 PHP(大约 6 个月,我知道,我是菜鸟),所以我发现了一些问题。尽管您可以构建一个单例类,但它基于变通方法,并且通常是一种不好的做法。另一个相关点是您不能将类强制转换为对象实例化(即create((Book)$bookList);)。但是我看不到任何无法在 PHP 中实现的 OO 概念。
  • 这个answer 说你的问题毫无意义。 :(
  • @AlanMachado,尝试重载,在同一个类中创建两个具有相同名称不同参数的方法:P。

标签: php oop php-5.4


【解决方案1】:

在 PHP 中没有用于用户定义对象类型转换的内置方法(尽管有一些变通方法)。

<?php

class Book
{
    public $title;
    public $isbn;
}

class BookShelf
{
    public static function create($booklist)
    {
        echo "Here are your books!";
    }
}

$bookList = new Book;
BookShelf::create($bookList); // output "Here are your books!"

$bookList = new stdClass();
BookShelf::create((Book)$bookList); // output a parse error of undefined variable $bookList

【讨论】:

    【解决方案2】:

    其他语言(通常为强类型)具有重载的东西,这意味着您可以拥有两个或多个具有相同名称但参数不同的方法,但 PHP 没有。

    <?php
    
    Class Foo{
        public function bar(){
            echo 'normal bar';
        }
    
        public function bar($arg){
            echo 'special bar with arg '. $arg;
        }
    }
    
    $f = new Foo();
    

    您收到此错误:Fatal error: Cannot redeclare Foo::bar() in

    【讨论】:

    • 那么,what is it,然后呢? :P 但无论如何我明白你的意思... PHP 不是强类型的,所以我们俩最终都是“正确的”。 +1 好点
    【解决方案3】:
    1. 函数重载
    2. 运算符重载
    3. 多重继承

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多