ホームページ  >  記事  >  バックエンド開発  >  【筆記試験問題】PHPで電子レンジを書いてください

【筆記試験問題】PHPで電子レンジを書いてください

藏色散人
藏色散人転載
2019-06-17 10:14:453671ブラウズ

インターネットで筆記試験の問題を見て、とても興味深いと思い、解いてみました。修正があれば歓迎します。

コーディングに関する質問 (OOP アイデアを使用したコード、コードの仕様に注意) アイデアを書き出します。コードを用意するのが最善です。

電子レンジを書くPHP では、加熱中はドアを開けることができず、ベルトシェルのある食品は加熱できないことに注意してください。

ご提案ありがとうございます。OOP についての理解が深まりましたので、第 2 版を更新します

第 2 版

<?php
/**
 * Created by PhpStorm.
 * User: arun
 * Date: 2019-04-30
 * Time: 16:10
 */
/**
 * 厨房用具
 * Interface kitchenWare
 */
interface kitchenWare {
    /**
     * 加工食材
     * @param Food $food
     * @return mixed
     */
    public function process(Food $food);
    /**
     * 是否正在加工
     * @return mixed
     */
    public function hasProcess();
}
/**
 * 微波炉
 * Class MicrowaveOven
 */
class MicrowaveOven implements kitchenWare
{
    /**
     * 是否加热中
     * @var bool
     */
    protected $is_heat = false;
    /**
     * @param Food $food
     * @return mixed|string
     */
    public function process(Food $food)
    {
        if ($this->hasProcess()) {
            return &#39;已有食物在加热,无法打开&#39;;
        } else {
            if ($food->hasShuck() || $food->hasPericarp()) {
                return &#39;食物带壳或者带皮,无法进行加热&#39;;
            } else {
                $this->is_heat = true;
                return &#39;食物加热中,加热完成即可取出&#39;;
            }
        }
    }
    /**
     * 是否正在加工
     * @return bool|mixed
     */
    public function hasProcess()
    {
        return $this->is_heat;
    }
}
/**
 * 烤箱
 * Class Oven
 */
class Oven implements kitchenWare
{
    /**
     * 是否烧烤中
     * @var bool
     */
    protected $is_heat = false;
    /**
     * @param Food $food
     * @return mixed|string
     */
    public function process(Food $food)
    {
        if ($this->is_heat) {
            return &#39;已有食物在烤制,无法打开&#39;;
        } else {
            if ($food->hasShuck()) {
                return &#39;食物带壳,无法进行烤制&#39;;
            } else {
                $this->is_heat = true;
                return &#39;食物烤制中,完成即可取出&#39;;
            }
        }
    }
    /**
     * 是否正在加工
     * @return bool|mixed
     */
    public function hasProcess()
    {
        return $this->is_heat;
    }
}
/**
 * 食物
 * Class Food
 */
class Food
{
    /**
     * 是否带壳
     * @var bool
     */
    protected $is_shuck = false;
    /**
     * 是否带皮
     * @var bool
     */
    protected $is_pericarp = false;
    /**
     * Food constructor.
     * @param bool $is_shuck
     * @param bool $is_pericarp
     */
    public function __construct(bool $is_shuck, bool $is_pericarp)
    {
        $this->is_shuck = $is_shuck;
        $this->is_pericarp = $is_pericarp;
    }
    /**
     * 判断是否带壳
     * @return bool
     */
    public function hasShuck()
    {
        return $this->is_shuck;
    }
    /**
     * 判断是否带皮
     * @return bool
     */
    public function hasPericarp()
    {
        return $this->is_pericarp;
    }
}
/**
 * 烹饪
 * Class Cooking
 */
class Cooking
{
    /**
     * @var kitchenWare
     */
    protected $kitchenWare;
    /**
     * Cook constructor.
     * @param kitchenWare $kitchenWare
     */
    public function __construct(kitchenWare $kitchenWare)
    {
        $this->kitchenWare = $kitchenWare;
    }
    /**
     * 烹饪食物
     * @param Food $food
     * @return mixed
     */
    public function cooking(Food $food)
    {
        $data = $this->kitchenWare->process($food);
        return $data;
    }
}
/**
 * 微波炉加热
 * @return mixed
 */
function test()
{
    $cooking = new Cooking(new MicrowaveOven());
    $food = new Food(false, false);
    $result = $cooking->cooking($food);
    $result2 = $cooking->cooking($food);
    var_dump($result, $result2);
}
/**
 * 烤箱烤制
 * @return mixed
 */
function test2()
{
    $cooking = new Cooking(new Oven());
    $food = new Food(false, true);
    $result =  $cooking->cooking($food);
    $result2 =  $cooking->cooking($food);
    var_dump($result, $result2);
}
test();
test2();

初版

<?php
/**
 * Created by PhpStorm.
 * User: arun
 * Date: 2019-04-30
 * Time: 16:10
 */
/**
 * 厨房用具
 * Interface kitchenWare
 */
interface kitchenWare {
    /**
     * 加工食材
     *
     * @param $food
     * @return mixed
     */
    public function process($food);
}
/**
 * 微波炉
 * Class MicrowaveOven
 */
class MicrowaveOven implements kitchenWare
{
    /**
     * 是否加热中
     * @var bool
     */
    protected $is_heat = false;
    public function process($food)
    {
        if ($this->is_heat) {
            return &#39;已有食物在加热,无法打开&#39;;
        } else {
            if ($food[&#39;is_shuck&#39;] || $food[&#39;is_pericarp&#39;]) {
                return &#39;食物带壳或者带皮,无法进行加热&#39;;
            } else {
                $this ->is_heat = true;
                return &#39;食物加热中,加热完成即可取出&#39;;
            }
        }
    }
}
/**
 * 烤箱
 * Class Oven
 */
class Oven implements kitchenWare
{
    /**
     * 是否烧烤中
     * @var bool
     */
    protected $is_heat = false;
    public function process($food)
    {
        if ($this->is_heat) {
            return &#39;已有食物在烤制,无法打开&#39;;
        } else {
            if ($food[&#39;is_shuck&#39;]) {
                return &#39;食物带壳,无法进行烤制&#39;;
            } else {
                $this ->is_heat = true;
                return &#39;食物烤制中,完成即可取出&#39;;
            }
        }
    }
}
/**
 * 食物
 * Class Food
 */
class Food
{
    /**
     * 是否带壳
     * @var bool
     */
    protected $is_shuck = false;
    /**
     * 是否带皮
     * @var bool
     */
    protected $is_pericarp = false;
    /**
     * Food constructor.
     * @param bool $is_shuck
     * @param bool $is_pericarp
     */
    public function __construct(bool $is_shuck, bool $is_pericarp)
    {
        $this->is_shuck = $is_shuck;
        $this->is_pericarp = $is_pericarp;
    }
    public function getFood()
    {
        return [
            &#39;is_shuck&#39; => $this->is_shuck,
            &#39;is_pericarp&#39; => $this->is_pericarp,
        ];
    }
}
/**
 * 烹饪
 * Class Cooking
 */
class Cooking
{
    /**
     * @var kitchenWare
     */
    protected $kitchenWare;
    /**
     * Cook constructor.
     * @param kitchenWare $kitchenWare
     */
    public function __construct(kitchenWare $kitchenWare)
    {
        $this->kitchenWare = $kitchenWare;
    }
    /**
     * 烹饪食物
     * @param $food
     * @return mixed
     */
    public function cooking($food)
    {
        $data = $this->kitchenWare->process($food);
        return $data;
    }
}
/**
 * 微波炉加热
 * @return mixed
 */
function test()
{
    $cooking = new Cooking(new MicrowaveOven());
    $food = new Food(false, false);
    $result = $cooking->cooking($food->getFood());
    $result2 = $cooking->cooking($food->getFood());
    var_dump($result, $result2);
}
/**
 * 烤箱烤制
 * @return mixed
 */
function test2()
{
    $cooking = new Cooking(new Oven());
    $food = new Food(false, true);
    $result =  $cooking->cooking($food->getFood());
    $result2 =  $cooking->cooking($food->getFood());
    var_dump($result, $result2);
}
test();
test2();

以上が【筆記試験問題】PHPで電子レンジを書いてくださいの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はlearnku.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。