[英]I need the url in the ajax script to be a variable from a php file but I don't know how to do this
[英]PHP: how do I know if a variable is a "::class?"
我有 PHP 代碼,它將參數作為User::class
傳遞,然后用new $p
實例化。
但我還需要能夠向它傳遞一個查詢實例......一個具體實例,當然,它也是一個對象......它是一個類的成員。
因此,如何檢測變量的值是否是使用::class
命名法創建的?
一個小小的單線暗示了一個答案:
$ php -r 'class foo {}; print gettype(foo::class);'
string
這個假設正確嗎? 一個對象實例(例如一個查詢)將是object
類型,而::class
構造將是string
? 我剛剛回答了我自己的問題嗎?
為了澄清,我的代碼想要這樣做:
if (gettype($q) == 'string') {
$query = new $q(); // must be '::class' (TRUE in my situation tho' not generally)
} else { // (so, the only other possibility in my case is 'object')
$query = $q; // existing object instance
}
...在我的特定情況下,我知道參數將始終是一個或另一個。 我不需要通用的解決方案。
foo::class
是一個字符串,它與其他字符串沒有區別。
class_exists
函數可以幫助您:
var_dump(class_exists(foo::class));
結果:真
以下是您的選擇:
class Foo {
}
$foo = new Foo;
is_object($foo); // $foo is an object
is_string($foo); // No, $foo isn't a string
$foo instanceof Foo // $foo is an instance of Foo
is_string(Foo::class) // Foo::class is a string just like any other string
get_class($foo) // returns 'Foo'
class_exists('Foo') // returns true if class Foo can be found
foo::class
調用返回類名的字符串。 您可以實例化一個對象並為它提供一個變量,如下所示:
$p = foo::class;
$query = new QueryThing();
$obj = new $p($query);
你可以這樣做看看你有什么類型的課程
get_class($p) // returns "foo"
$p instanceof foo // returns true
但是您無法知道您的對象是從foo::class
調用動態實例化的。
沒有人趕緊告訴我我錯了,我會說“是的,為了我的目的,我確實回答了我自己的問題。” (我編輯了原始問題以顯示我的想法。)
你可以拍攝instanceof
if($q instanceof Foo){
echo "Here do the things you need with your class";
} else {
echo "Assume it is a string?";
}
我建議的另一個選擇是確保通過類型提示獲得您期望的數據。
function bar(Foo $foo){
//foo has to be Foo class or exception will be thrown.
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.