当按钮点击或页面以纯粹的OOP风格加载时,如何在PHP中调用我的基于OOP的类和方法



点1:

因此,我是PHP OOP的初学者,被要求完成一个项目,以便在一家公司招聘。他们在指导方针中要求只使用PHP OOP进行编码,最近返回了我的项目,并提出了以下一点:";过程PHP代码只允许初始化PHP类。Rest逻辑应该放在类方法中">现在,我陷入了困境,因为我不知道如何在不实例化类的情况下调用我的php代码,比如:

  • 单击按钮时执行保存/删除功能
  • 在主页上自动显示我的phpMyadmin数据库中的所有产品页面加载时

我的前端是使用基本的HTML+JQuery制作的,我需要使用php-op进行所有逻辑处理。

这是我的代码片段,当单击按钮时,我使用isset来调用函数或实例化类,并在构造函数中添加对函数的调用,我不知道如何调用我的函数,就像我必须在某个地方实例化对象,并在特定事件发生时根据一些检查来调用函数一样。

//placed these checks in a procuctinfo.php class which is called when button save/delete(with action="productinfo.php" method = "post") is clicked 
if (isset($_POST['save'])) {
$product = new $_POST['productType'](); //goes to constructor of specific product where method is called to save data
}
if (isset($_POST['delete'])) {
Product::delete(); // static method called since delete is not object specific
}

//here is my constructor of one of the product classes 
public function __construct(){ //contructor for one of the products
parent::__construct();
if (isset($_POST['save'])) {
$this->weight =$_POST['weight'];
**$this->setData()**; //method called within constructor which saves data in my db
}
}

类似地,为了在主页上呈现所有产品,我以以下方式在html中嵌入了php代码,

<div class="text-center py-2 px-5 justify-content-center d-flex flex-wrap gap-4">
<?php
$DVDs = new DVD([]);
$result = $DVDs->getAllData();
if($result){
foreach($result as $product){
$productObj = new $product['productType']([]);
$productResult = $productObj->getDataProductWise($product);
?>
<div class="col-lg-3 col-md-3 ">
<div class="card">
<div class="bg-image hover-zoom ripple ripple-surface ripple-surface-light"
data-mdb-ripple-color="light">                      
<div class="form-check delete-checkbox">
<input class="form-check-input m-3 border border-dark rounded-0" type="checkbox" name = "deleteChecked[]" value="<?= $productResult['sku'] ?>" id="flexCheckDefault">
</div>
</div>
<div class="card-body">
<h5 class="card-title mb-3"><?= $productResult['sku'] ?></h5>
<h6><?= $productResult['name'] ?></h6>
<h6 class="mb-3"><?= $productResult['price'] ?> $</h6>
<h6 class="mb-3"><?= $productResult['attribute']?></h6>
</div>
</div>
</div>
<?php
}
}
?>
</div>  

如果有一些纯粹基于OOP的方式/方法可以做到这一点,请指导我。

第2点:

我给他们提供了一个网站链接,我使用https://www.000webhost.com/网站,但他们要求我:";请提供FE链接">

这是什么?我如何创建它?

我不喜欢在构造函数中看到$_POST[]。这纯粹是我的观点,但我可以给出一些理由:这是原始用户输入,考虑安全性,类应该创建为灵活的,而不是僵化的,因为的输入来自用户。

您的代码片段非常短。我对此无能为力。只有输出代码足够长。

在它中,我看到你实际上并没有使用对象,而是将它们转换为数组。为什么?CCD_ 2和CCD_ 3不应在此代码中使用。它应该只是getProducts(),它应该返回一个包含零个或多个产品对象的数组。

这意味着,当你需要从一个对象中显示一些东西时,你可以这样做:

echo '<h6 class="mb-3">' . $product->getPrice() . '</h6>';

您可以在DVD类中创建一个名为outputProductHtml($product)的方法来输出产品,然后您还可以执行以下操作:

public function outputProductsHtml()
{
foreach ($this->getProducts() as $product) {
outputProductHtml($product);
}
}

像这样保持方法简洁。现在,DVD类可以为单个产品或其包含的所有产品生成HTML。

最新更新