首页 > 解决方案 > PHP自动加载捕获选择的值,而不是找到一个类

问题描述

我一直在关注 Youtube 上的这个自动加载活动,但我似乎再也找不到问题所在了。请帮忙。

一切看起来像这样: daniactivity>(第一个文件夹)classes>calc.class.php(第二个文件夹)includes>calc.inc.php & class-autoload.inc.php(无文件夹)index.php

daniactivity/classes/calc.class.php

class Calc{

public $operator;
public $num1;
public $num2;

public function __construct(string $operator, int $num1 , int $num2){
    $this->operator = $operator;
    $this->num1 = $num1;
    $this->num2 = $num2;

}

public function calculator(){

    switch ($this->operator) {
        case 'add':
            $result = $this->num1 + $this->num2;
            $result;
            break;
        case 'sub':
            $result = $this->num1 - $this->num2;
            $result;
            break;
        case 'div':
            $result = $this->num1 / $this->num2;
            $result;
            break;
        case 'mul':
            $result = $this->num1 * $this->num2;
            $result;
            break;
        default://in case error
            echo "Error";
            break;
    }
}

daniactivity/includes/calc.inc.php

declare(strict_types=1);
include'class-autoload.inc.php';

$oper = new $_GET['oper'];
$num1 = new $_GET['num1'];
$num2 = new $_GET['num2'];

$obj = new Calc($oper,(int)$num1,(int)$num2);

try {
    echo $obj->calculator();
    
} catch (TypeError $e) {

    echo "Error!" . $e->getMessage();
    
}

daniactivity/includes/class.autoload.php

 spl_autoload_register('myAutoLoader');

 function myAutoLoader($className){

 $url = $_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; 

 if (strpos($url, 'includes') !==false) {
    $path = '../classes/';
 }
 else {
    $path = 'classes/';
 }
 $extension = '.class.php';
 require_once $path.$className.$extension;

daniactivity/index.php

<?php 

declare(strict_types = 1);
include 'includes/class-autoload.inc.php';
?>

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title></title>
</head>
<body>  

    <form action="includes/calc.inc.php" method="get">
        <p>My Own calculator</p>
        <input type="number" name="num1">
        <select name="oper">
            <option value="add">Addition</option>
            <option value="sub">Subtraction</option>
            <option value="div">Div</option>
            <option value="mul">Multiplication</option>
        </select>
        <input type="number" name="num2" placeholder="second number">
        <button type="submit" name="submit">Calculate</button>
    </form>
</body>
</html>

我得到了什么

我没有计算,而是得到了这个。

警告:require_once(../classes/mul.class.php):无法打开流:第 27 行的 C:\xampp\htdocs\daniactivity\includes\class-autoload.inc.php 中没有这样的文件或目录

致命错误:require_once():在 C:\xampp\htdocs\daniactivity\includes\class- 中打开所需的 '../classes/mul.class.php' (include_path='C:\xampp\php\PEAR') 失败第 27 行的 autoload.inc.php

每次我在选择中选择加法或减法或任何时,它都会获取该值并将其添加到自动加载器的路径中。

我不明白自动加载器如何扫描类,但我认为它与 URL 有关。请帮助:<< 非常感谢您花时间阅读本文。

标签: phphtml

解决方案


推荐阅读