Hướng dẫn php namespace not working - không gian tên php không hoạt động

Tôi đang sử dụng XAMPP trên Windows 7 với Php 5.6.24. Tôi có vấn đề với không gian tên PHP.

Dự án của tôi Direcotry trông như thế này:

-project
 + config
 - Framework
   + database
   + Expection
   test.php
 + src
 index.php

Tôi có tệp PHP bên trong Framework/test.php và nó chứa mã sau:

Trong thư mục gốc của tôi, tôi có index.php, composer.json

Composer của tôi.json có đối tượng tự động tải

  "autoload": {
    "psr-4": {
      "Framework\\": "Framework/"
    },
    "files": [
        "src/Helpers/ArrayHelpers.php"
    ]
  },

Trong index.php của tôi, tôi có mã sau:

";

require __DIR__ . '/vendor/autoload.php';
use Framework\Test;
$n      = new Test;
print_r($n);

Khi tôi chạy tệp index.php trên trình duyệt, tôi nhận được phản hồi:

Tôi đang tham gia lớp Test.php;

Lỗi nghiêm trọng: Lớp 'Khung \ test' không tìm thấy trong C: \ Xampp \ HtDocs \ Project \ index.php trên dòng 12

Tôi không biết mình đang làm gì sai? Không gian tên của tôi có sai không? Nhưng tôi đang nhận được tiếng vang từ tập tin đó như thế nào? tại sao ? Có chuyện gì vậy? Tệp nhà soạn nhạc của tôi có sai không?

Cảm ơn trước.

11 năm trước

(Php 5> = 5.3.0, Php 7, Php 8)

  1. Trước khi thảo luận về việc sử dụng các không gian tên, điều quan trọng là phải hiểu làm thế nào PHP biết phần tử tên nào được yêu cầu. Một sự tương tự đơn giản có thể được thực hiện giữa các không gian tên PHP và hệ thống tập tin. Có ba cách để truy cập một tệp trong hệ thống tệp:
  2. Tên tệp tương đối như foo.txt. Điều này giải quyết cho currentdirectory/foo.txt trong đó hiện tại là thư mục hiện đang bị chiếm. Vì vậy, nếu thư mục hiện tại là /home/foo, tên được giải quyết thành /home/foo/foo.txt.
  3. Tên đường dẫn tương đối như subdirectory/foo.txt. Điều này giải quyết đến
    0.

Tên đường dẫn tuyệt đối như

1. Điều này giải quyết đến
1.

  1. Nguyên tắc tương tự có thể được áp dụng cho các yếu tố đặt tên trong PHP. Ví dụ, một tên lớp có thể được đề cập theo ba cách: One caveat: unqualified names for functions and constants will resolve to global functions and constants if the namespaced function or constant is not defined. See Using namespaces: fallback to global function/constant for details.
  2. Tên không đủ tiêu chuẩn, hoặc một tên lớp không bị hủy bỏ như
    3 hoặc
    4. Nếu không gian tên hiện tại là
    5, điều này sẽ giải quyết thành
    6. Nếu mã là mã toàn cầu, không được ký tên, thì điều này sẽ giải quyết thành
    7. Một cảnh báo: Tên không đủ tiêu chuẩn cho các hàm và hằng số sẽ giải quyết cho các chức năng và hằng số toàn cầu nếu hàm tên hoặc hằng số không được xác định. Xem bằng cách sử dụng không gian tên: dự phòng vào chức năng/hằng số toàn cầu để biết chi tiết.
  3. Tên đủ điều kiện hoặc tên tiền tố với toán tử tiền tố toàn cầu như
      "autoload": {
        "psr-4": {
          "Framework\\": "Framework/"
        },
        "files": [
            "src/Helpers/ArrayHelpers.php"
        ]
      },
    
    3 hoặc
      "autoload": {
        "psr-4": {
          "Framework\\": "Framework/"
        },
        "files": [
            "src/Helpers/ArrayHelpers.php"
        ]
      },
    
    4.Điều này luôn giải quyết cho tên theo nghĩa đen được chỉ định trong mã,
    6.

Dưới đây là một ví dụ về ba loại cú pháp trong mã thực tế:

file1.php

  "autoload": {
    "psr-4": {
      "Framework\\": "Framework/"
    },
    "files": [
        "src/Helpers/ArrayHelpers.php"
    ]
  },
6

  "autoload": {
    "psr-4": {
      "Framework\\": "Framework/"
    },
    "files": [
        "src/Helpers/ArrayHelpers.php"
    ]
  },
7

  "autoload": {
    "psr-4": {
      "Framework\\": "Framework/"
    },
    "files": [
        "src/Helpers/ArrayHelpers.php"
    ]
  },
8

file2.php

  "autoload": {
    "psr-4": {
      "Framework\\": "Framework/"
    },
    "files": [
        "src/Helpers/ArrayHelpers.php"
    ]
  },
9

  "autoload": {
    "psr-4": {
      "Framework\\": "Framework/"
    },
    "files": [
        "src/Helpers/ArrayHelpers.php"
    ]
  },
7

";

require __DIR__ . '/vendor/autoload.php';
use Framework\Test;
$n      = new Test;
print_r($n);
1

Lưu ý rằng để truy cập bất kỳ lớp toàn cầu, hàm hoặc hằng số, có thể sử dụng tên đủ điều kiện, chẳng hạn như \ strlen () hoặc \ Exception hoặc

";

require __DIR__ . '/vendor/autoload.php';
use Framework\Test;
$n      = new Test;
print_r($n);
2.\strlen() or \Exception or
";

require __DIR__ . '/vendor/autoload.php';
use Framework\Test;
$n      = new Test;
print_r($n);
2.

Ví dụ #1 truy cập các lớp, chức năng và hằng số toàn cầu từ trong không gian tên

";

require __DIR__ . '/vendor/autoload.php';
use Framework\Test;
$n      = new Test;
print_r($n);
3

";

require __DIR__ . '/vendor/autoload.php';
use Framework\Test;
$n      = new Test;
print_r($n);
4

";

require __DIR__ . '/vendor/autoload.php';
use Framework\Test;
$n      = new Test;
print_r($n);
5

Richard tại Richard-sumilang dot com

14 năm trước

";

require __DIR__ . '/vendor/autoload.php';
use Framework\Test;
$n      = new Test;
print_r($n);
6

";

require __DIR__ . '/vendor/autoload.php';
use Framework\Test;
$n      = new Test;
print_r($n);
7

";

require __DIR__ . '/vendor/autoload.php';
use Framework\Test;
$n      = new Test;
print_r($n);
8

";

require __DIR__ . '/vendor/autoload.php';
use Framework\Test;
$n      = new Test;
print_r($n);
9

index.php0

Ẩn danh ¶

8 năm trước

index.php1

index.php2

index.php3

Lukas Z

10 năm trước

index.php4

index.php5

index.php6

Tom tại Tomwardrop Dot Com ¶

10 năm trước

index.php7

index.php8

index.php9

foo.txt0

Tom tại Tomwardrop Dot Com ¶

Philip Dot Preisser tại Arcor Dot de ¶

foo.txt1

foo.txt2

foo.txt3

foo.txt4