使用常量作为函数属性
Use constant as Function attributes
我有一个关于函数声明的问题。我想要类似的东西:
password_hash('er', PASSWORD_ARGON2I);
https://www.php.net/manual/en/function.password-hash.php
当我创建一个函数时,我想声明一些可能性,例如:
- PASSWORD_DEFAULT = 1
- PASSWORD_BCRYPT = 2
- PASSWORD_ARGON2I = 3
- PASSWORD_ARGON2ID=4
然后,当用户使用该函数时,他只需设置常量或常量的值。
其实我是这样的:
$instanceOfMyClass->myFunction('er', MyClass::A_CONSTANT);
它完成了工作,但我不得不在使用常量名称之前写下 class 名称。然后,如果我这样做,我就可以访问 class.
的所有常量
我想,我说的是函数级别的常量之类的东西。
非常感谢:-)
PS:有没有办法为函数属性做一个像 int|object|string 这样的 DeclarationType?实际上我在这种情况下不输入提示,对于对象,我需要指定一个 class 或一个接口,有时,我接受许多对象来调用 __toString() 魔法 class,那么我接受所有对象。
有很多方法可以做到。
定义的常量不可修改,但满足条件时可以分析验证;尽管这个人正在做所有这些;因为对于不可变/不可变的东西来说这将是双重工作
<?php
class Main{
const CONSTANT = 'value constant';
function ouputConts() {
echo var_dump(self::CONSTANT);
}
}
在你的情况下;我可以保持不变:
<?php
class Main{
const CONSTANT1 = 1; //integer
const CONSTANT2 = 0.1345; //float
const CONSTANT3 = 'text'; //string
const CONSTANT4 = array(1,2,3,4,5,10,20); //array
const CONSTANT5 = true; //bollean
function ouputConts() {
echo var_dump(self::CONSTANT1);
echo var_dump(self::CONSTANT2);
echo var_dump(self::CONSTANT3);
echo var_dump(self::CONSTANT4);
echo var_dump(self::CONSTANT5);
}
}
因为在 php 中,一个对象或任何类型的对象都被认为是可变的;您不能声明类型对象的常量。
文档:
https://php.net/manual/en/language.constants.syntax.php
https://www.php.net/manual/en/language.oop5.constants.php
所以你的另一个问题是你是否可以将常量作为函数的 属性 传递:
是的,但你应该有一些注意事项:
如果您在同一个 class 中,则没有必要在同一个 class 的任何函数中使用该值,而无需将其传递给 class ] / 范围:
class Main{
const CONSTANT = 'value constant';
function function1() {
$this->function2();
}
function function2() {
$this->function3();
}
function function3() {
$this->function4();
}
function function4() {
echo var_dump(self::CONSTANT);
}
}
如果该函数属于另一个 class 我建议您先将其存储在一个变量中 ...:[=20=]
class Main1{
const CONSTANT = 'value constant';
function function1() {
$foo = CONSTANT;
Main2::FunctionTest($foo);
}
}
class Main2{
function FunctionTest($foo = '') {
echo var_dump($foo);
}
}
// I can not verify it.
希望对您的问题有所帮助;如果您需要更多帮助或加深您的查询,请给我留言。
更新;我看到这个通讯网:
@ChristophBurschka By doing that, when you use the function you don't
have help for retrieve specific constant (all class consant are not
available for this function). When you use native PHP function, you
just have possibilities to use available constant and the IDE have the
capatibilities to find them (and it list it to you automatically when
you start to fill the corresponding argument)? Thanks for your answer
about Type hint :-)
如果问题在您的范围内 const
:
您可以在应用程序中声明全局常量(在所有 classes 和函数中):
<?php
if (!defined('DB_PASS')) {
define('DB_PASS', 'yourpassword');
}
它将在整个应用程序的任何 class 和功能中可用。并且不用担心它的使用,因为它们是不可变的常量。
更新恢复和实施
通过我最后解释的方式,你可以进行比较并定义你要使用的数据;如果常量的数据或用户发送的数据;但所有这些都必须与您定义的特定功能中的用户数据分析相关联。
最后更新
有了新的定义,你可以这样做:
<?php
//declaration:
if (!defined('PASS_SIS')) {
define('PASS_SIS', array(
'PASSWORD_DEFAULT' => 1,
'PASSWORD_BCRYPT' => 2,
'PASSWORD_ARGON2I' => 3,
'PASSWORD_ARGON2ID' => 4,
));
}
//call Function
$instanceOfMyClass->myFunction('er');
//function
function myFunction('er'){
echo var_dump(PASS_SIS);
//Access to data:
echo PASS_SIS['PASSWORD_DEFAULT'];
}
我不太明白你的问题
constants like PASSWORD_DEFAULT, but just it (no function name with double :).
但我的猜测是,您正在寻找 define()
。
我建议您尽可能多地使用 OOP,所以就像其他人所说的那样,使用 class 常量。但是如果你出于任何原因想要全局常量,它是这样的:
define('DIRECTION_FORWARD', 0);
define('DIRECTION_LEFT', 1);
define('DIRECTION_RIGHT', 2);
function goInDirection($direction = DIRECTION_FORWARD)
{
// ....
}
您可以使用位掩码,而不是仅仅将序号作为值,它与按位运算符和 2 的幂一起使用。
https://www.php.net/manual/en/language.operators.bitwise.php
我有一个关于函数声明的问题。我想要类似的东西:
password_hash('er', PASSWORD_ARGON2I);
https://www.php.net/manual/en/function.password-hash.php
当我创建一个函数时,我想声明一些可能性,例如:
- PASSWORD_DEFAULT = 1
- PASSWORD_BCRYPT = 2
- PASSWORD_ARGON2I = 3
- PASSWORD_ARGON2ID=4
然后,当用户使用该函数时,他只需设置常量或常量的值。
其实我是这样的:
$instanceOfMyClass->myFunction('er', MyClass::A_CONSTANT);
它完成了工作,但我不得不在使用常量名称之前写下 class 名称。然后,如果我这样做,我就可以访问 class.
的所有常量我想,我说的是函数级别的常量之类的东西。
非常感谢:-)
PS:有没有办法为函数属性做一个像 int|object|string 这样的 DeclarationType?实际上我在这种情况下不输入提示,对于对象,我需要指定一个 class 或一个接口,有时,我接受许多对象来调用 __toString() 魔法 class,那么我接受所有对象。
有很多方法可以做到。
定义的常量不可修改,但满足条件时可以分析验证;尽管这个人正在做所有这些;因为对于不可变/不可变的东西来说这将是双重工作
<?php
class Main{
const CONSTANT = 'value constant';
function ouputConts() {
echo var_dump(self::CONSTANT);
}
}
在你的情况下;我可以保持不变:
<?php
class Main{
const CONSTANT1 = 1; //integer
const CONSTANT2 = 0.1345; //float
const CONSTANT3 = 'text'; //string
const CONSTANT4 = array(1,2,3,4,5,10,20); //array
const CONSTANT5 = true; //bollean
function ouputConts() {
echo var_dump(self::CONSTANT1);
echo var_dump(self::CONSTANT2);
echo var_dump(self::CONSTANT3);
echo var_dump(self::CONSTANT4);
echo var_dump(self::CONSTANT5);
}
}
因为在 php 中,一个对象或任何类型的对象都被认为是可变的;您不能声明类型对象的常量。
文档: https://php.net/manual/en/language.constants.syntax.php https://www.php.net/manual/en/language.oop5.constants.php
所以你的另一个问题是你是否可以将常量作为函数的 属性 传递:
是的,但你应该有一些注意事项:
如果您在同一个 class 中,则没有必要在同一个 class 的任何函数中使用该值,而无需将其传递给 class ] / 范围:
class Main{
const CONSTANT = 'value constant';
function function1() {
$this->function2();
}
function function2() {
$this->function3();
}
function function3() {
$this->function4();
}
function function4() {
echo var_dump(self::CONSTANT);
}
}
如果该函数属于另一个 class 我建议您先将其存储在一个变量中 ...:[=20=]
class Main1{
const CONSTANT = 'value constant';
function function1() {
$foo = CONSTANT;
Main2::FunctionTest($foo);
}
}
class Main2{
function FunctionTest($foo = '') {
echo var_dump($foo);
}
}
// I can not verify it.
希望对您的问题有所帮助;如果您需要更多帮助或加深您的查询,请给我留言。
更新;我看到这个通讯网:
@ChristophBurschka By doing that, when you use the function you don't have help for retrieve specific constant (all class consant are not available for this function). When you use native PHP function, you just have possibilities to use available constant and the IDE have the capatibilities to find them (and it list it to you automatically when you start to fill the corresponding argument)? Thanks for your answer about Type hint :-)
如果问题在您的范围内 const
:
您可以在应用程序中声明全局常量(在所有 classes 和函数中):
<?php
if (!defined('DB_PASS')) {
define('DB_PASS', 'yourpassword');
}
它将在整个应用程序的任何 class 和功能中可用。并且不用担心它的使用,因为它们是不可变的常量。
更新恢复和实施
通过我最后解释的方式,你可以进行比较并定义你要使用的数据;如果常量的数据或用户发送的数据;但所有这些都必须与您定义的特定功能中的用户数据分析相关联。
最后更新
有了新的定义,你可以这样做:
<?php
//declaration:
if (!defined('PASS_SIS')) {
define('PASS_SIS', array(
'PASSWORD_DEFAULT' => 1,
'PASSWORD_BCRYPT' => 2,
'PASSWORD_ARGON2I' => 3,
'PASSWORD_ARGON2ID' => 4,
));
}
//call Function
$instanceOfMyClass->myFunction('er');
//function
function myFunction('er'){
echo var_dump(PASS_SIS);
//Access to data:
echo PASS_SIS['PASSWORD_DEFAULT'];
}
我不太明白你的问题
constants like PASSWORD_DEFAULT, but just it (no function name with double :).
但我的猜测是,您正在寻找 define()
。
我建议您尽可能多地使用 OOP,所以就像其他人所说的那样,使用 class 常量。但是如果你出于任何原因想要全局常量,它是这样的:
define('DIRECTION_FORWARD', 0);
define('DIRECTION_LEFT', 1);
define('DIRECTION_RIGHT', 2);
function goInDirection($direction = DIRECTION_FORWARD)
{
// ....
}
您可以使用位掩码,而不是仅仅将序号作为值,它与按位运算符和 2 的幂一起使用。
https://www.php.net/manual/en/language.operators.bitwise.php