如何在现有PHP代码中实现可正常运行的删除功能?
代码问题说明
- 现有删除方法逻辑无效:你定义的
deletePatient方法内,$this->intro是类的公共输出方法,并非存储实例的数组,对其执行unset操作没有任何作用,也无法操作你存储所有实例的全局$straw数组。 - 作用域不匹配:
$straw是定义在类外部的全局变量,类内部方法默认无法直接访问该变量,直接在类内操作全局变量也不符合面向对象的封装规范。
适配现有结构的修改方案
你可以调整删除方法的逻辑,将存储实例的数组作为参数传入,处理后返回修改后的数组,修改后可运行的代码如下:
<?php $straw = []; $index = 0; class Fruit { private $name; private $color; public function describe($name, $color) { $this->name = $name; $this->color = $color; } public function intro() { echo "{$this->name}"."\n"; echo "{$this->color}"."\n"; } } class Strawberry extends Fruit { public function getfruit() { $this->intro(); } public function assignfruit($name, $color){ $this->describe($name, $color); } // 调整删除方法逻辑 public function deleteFruit($list, $index){ if(isset($list[$index])){ unset($list[$index]); } // 重置数组索引避免后续遍历出现问题 return array_values($list); } } $strawberry1 = new Strawberry(); $strawberry1->assignfruit("Strawberry", "red"); $straw[$index] = $strawberry1; $index++; $strawberry2 = new Strawberry(); $strawberry2->assignfruit("Strawberry", "red"); $straw[$index]= $strawberry2; $index++; // 调用删除方法接收修改后的数组 $straw = $strawberry2->deleteFruit($straw, 1); foreach ($straw as $star){ $star->getfruit(); }
如果你后续想优化代码结构,可以把实例存储的逻辑封装到专门的水果管理类中,避免使用全局变量,代码的可维护性会更高。
内容的提问来源于stack exchange,提问作者deeku ahlam
相关产品推荐
相关产品推荐

