nếu bạn (như tôi) đến đây tìm kiếm một bộ tạo mã nguồn cho array-> lớp, tôi thực sự không thể tìm thấy bất kỳ, và sau đó tôi đã đưa ra với điều này (một tác phẩm trong tiến trình, không tốt kiểm tra hoặc bất cứ điều gì, json_decode trả về mảng.):
<?php
declare(strict_types = 1);
$json = <<<'JSON'
{"object_kind":"push","event_name":"push","before":"657dbca6668a99012952c58e8c8072d338b48d20","after":"5ac3eda70dbb44bfdf98a3db87515864036db0f9","ref":"refs/heads/master","checkout_sha":"5ac3eda70dbb44bfdf98a3db87515864036db0f9","message":null,"user_id":805411,"user_name":"hanshenrik","user_email":"[email protected]","user_avatar":"https://secure.gravatar.com/avatar/e3af2bd4b5604b0b661b5e6646544eba?s=80\u0026d=identicon","project_id":3498684,"project":{"name":"gitlab_integration_tests","description":"","web_url":"https://gitlab.com/divinity76/gitlab_integration_tests","avatar_url":null,"git_ssh_url":"[email protected]:divinity76/gitlab_integration_tests.git","git_http_url":"https://gitlab.com/divinity76/gitlab_integration_tests.git","namespace":"divinity76","visibility_level":0,"path_with_namespace":"divinity76/gitlab_integration_tests","default_branch":"master","homepage":"https://gitlab.com/divinity76/gitlab_integration_tests","url":"[email protected]:divinity76/gitlab_integration_tests.git","ssh_url":"[email protected]:divinity76/gitlab_integration_tests.git","http_url":"https://gitlab.com/divinity76/gitlab_integration_tests.git"},"commits":[{"id":"5ac3eda70dbb44bfdf98a3db87515864036db0f9","message":"dsf\n","timestamp":"2017-06-14T02:21:50+02:00","url":"https://gitlab.com/divinity76/gitlab_integration_tests/commit/5ac3eda70dbb44bfdf98a3db87515864036db0f9","author":{"name":"hanshenrik","email":"[email protected]"},"added":[],"modified":["gitlab_callback_page.php"],"removed":[]}],"total_commits_count":1,"repository":{"name":"gitlab_integration_tests","url":"[email protected]:divinity76/gitlab_integration_tests.git","description":"","homepage":"https://gitlab.com/divinity76/gitlab_integration_tests","git_http_url":"https://gitlab.com/divinity76/gitlab_integration_tests.git","git_ssh_url":"[email protected]:divinity76/gitlab_integration_tests.git","visibility_level":0}}
JSON;
$arr = json_decode ($json, true);
var_dump (array_to_class ($arr));
/**
*
* @param array $arr
* @param string $top_class_name
*/
function array_to_class(array $arr, string $top_class_name = "TopClass"): string {
$top_class_name = ucfirst ($top_class_name);
$classes = array(); // deduplicated 'definition'=>true,array_keys();
$internal = function (array $arr, string $top_class_name) use (&$classes, &$internal) {
$curr = 'Class ' . $top_class_name . ' {' . "\n";
foreach ($arr as $key => $val) {
$type = gettype ($val);
if (is_array ($val)) {
$type = ucfirst ((string) $key);
$classes [$internal ($val, (string) $key)] = true;
}
$curr .= <<<FOO
/**
* @property $type \$$key
*/
FOO;
$curr .= "\n public $" . $key . ";\n";
}
$curr .= '}';
$classes [$curr] = true;
};
$internal ($arr, $top_class_name);
return implode ("\n", array_keys ($classes));
}
đầu ra:
Class project {
/**
* @property string $name
*/
public $name;
/**
* @property string $description
*/
public $description;
/**
* @property string $web_url
*/
public $web_url;
/**
* @property NULL $avatar_url
*/
public $avatar_url;
/**
* @property string $git_ssh_url
*/
public $git_ssh_url;
/**
* @property string $git_http_url
*/
public $git_http_url;
/**
* @property string $namespace
*/
public $namespace;
/**
* @property integer $visibility_level
*/
public $visibility_level;
/**
* @property string $path_with_namespace
*/
public $path_with_namespace;
/**
* @property string $default_branch
*/
public $default_branch;
/**
* @property string $homepage
*/
public $homepage;
/**
* @property string $url
*/
public $url;
/**
* @property string $ssh_url
*/
public $ssh_url;
/**
* @property string $http_url
*/
public $http_url;
}
Class author {
/**
* @property string $name
*/
public $name;
/**
* @property string $email
*/
public $email;
}
Class added {
}
Class modified {
/**
* @property string $0
*/
public $0;
}
Class removed {
}
Class 0 {
/**
* @property string $id
*/
public $id;
/**
* @property string $message
*/
public $message;
/**
* @property string $timestamp
*/
public $timestamp;
/**
* @property string $url
*/
public $url;
/**
* @property Author $author
*/
public $author;
/**
* @property Added $added
*/
public $added;
/**
* @property Modified $modified
*/
public $modified;
/**
* @property Removed $removed
*/
public $removed;
}
Class commits {
/**
* @property 0 $0
*/
public $0;
}
Class repository {
/**
* @property string $name
*/
public $name;
/**
* @property string $url
*/
public $url;
/**
* @property string $description
*/
public $description;
/**
* @property string $homepage
*/
public $homepage;
/**
* @property string $git_http_url
*/
public $git_http_url;
/**
* @property string $git_ssh_url
*/
public $git_ssh_url;
/**
* @property integer $visibility_level
*/
public $visibility_level;
}
Class TopClass {
/**
* @property string $object_kind
*/
public $object_kind;
/**
* @property string $event_name
*/
public $event_name;
/**
* @property string $before
*/
public $before;
/**
* @property string $after
*/
public $after;
/**
* @property string $ref
*/
public $ref;
/**
* @property string $checkout_sha
*/
public $checkout_sha;
/**
* @property NULL $message
*/
public $message;
/**
* @property integer $user_id
*/
public $user_id;
/**
* @property string $user_name
*/
public $user_name;
/**
* @property string $user_email
*/
public $user_email;
/**
* @property string $user_avatar
*/
public $user_avatar;
/**
* @property integer $project_id
*/
public $project_id;
/**
* @property Project $project
*/
public $project;
/**
* @property Commits $commits
*/
public $commits;
/**
* @property integer $total_commits_count
*/
public $total_commits_count;
/**
* @property Repository $repository
*/
public $repository;
}
Đừng nghĩ rằng bạn cần {} trong $ this -> {$ key} = $ value; tuyên bố – AntonioCS
@AntonioCS, nó không cần thiết nhưng nó chắc chắn nhấn mạnh sự truy cập của một thuộc tính có tên biến. Nó cũng chứng tỏ rằng '{}' có thể được sử dụng khi thuộc tính biến trở nên phức tạp hơn; ví dụ: '$ this -> {$ this-> foo ('bar')} -> do_something();' –
Thực sự là hai giải pháp tốt đẹp. Tôi không biết về những phương pháp ma thuật, thủ thuật gọn gàng. – John