如何在IF语句中使用PHP函数

3

简介

我想更好地理解我的Php知识,并使用类来更好地组织我的代码,所以这只是为了更好地理解而不是真正的解决方案。

简述

我正在调用一个从我刚学会的类中的函数,但我想知道在IF语句中使用对象这样的简单任务的最佳方法。

场景

例如,我正在设置我的类如下:

    class user
    {

        // Get users ID
        function get_user_id()
        {

            global $conn;
            $sql = 'SELECT id FROM user';
            $result = $conn->query($sql);

            if ($result->num_rows > 0) {

                while ($row = $result->fetch_assoc() ){
                    echo $row['id'] . ', '; }

            }
        }

        // Get users name
        function get_user_name()
        {
            global $conn;
            $sql = 'SELECT name FROM user';
            $result = $conn->query($sql);

            if ($result->num_rows > 0) {

                while ($row = $result->fetch_assoc() ){
                    echo $row['name'] . ', ';   }

            }
        }

    }

$userId = new user;
$userName = new user;

那么我在我的类中这样初始化:

<?php $userId->get_user_id(); ?>
<?php $userName->get_user_name(); ?>

然后我想要执行一个简单的任务,根据用户ID的值显示用户,上面的代码将返回4个结果集,因此id为1、2、3、4Dan、Andy、Ryan、Aran

所以我正在执行一个简单的IF语句,如下:

if($userId > 1){
    echo $userName;
} else {
    echo 'not working';
}

但是它返回“未工作”-我只是想更好地理解如何以使A正常工作和B最佳实践的方式使用函数。

你的 $userId 是一个对象,你如何输出它?请明确你想要什么。 - Rahul
$userIduser 类的一个对象吗? - Nana Partykar
我建议你 谷歌 面向对象编程(OOP) 并仔细阅读文档。 - Sougata Bose
我非常感谢这些答案,因为这正是我想要有经验的人就陷阱和我所做的事情是否正确提供建议的整个想法。 - danjbh
@VforVendetta 我只是想简单地了解如何基于用户ID设置参数,并显示大于1的ID的用户名。 - danjbh
显示剩余4条评论
5个回答

4

看起来你还没有完全理解面向对象编程。

这些代码示例应该能帮助你入门,但像其他评论中提到的那样,要多阅读关于面向对象编程的资料。我一开始也很难理解,但坚持学习!

创建用户类
这个类表示单个用户及与用户相关的操作,可以将其视为蓝图。它只应执行与用户相关的功能,不需要“知道”其他任何内容。例如,数据库函数应在其他地方完成。

class User {
   private $id;
   private $name;

   function __construct($array)
   {
       $this->id = $array['id'];
       $this->name = $array['name'];
   }

   function getId()
   {
       return $this->id;
   }

   function getName()
   {
       return $this->name;
   }
}

将所有用户加载到一个数组中
$sql = 'SELECT * FROM user';
$result = $conn->query($sql);

$users = [];
while ($row = $result->fetch_assoc() ){
   $users[] = new User($row);
}

// this array now contains all your users as User objects
var_dump($users);

// echo all user's details
foreach($users as $user) {
   echo $user->getId();
   echo ' - ';
   echo $user->getName();
   echo "\r\n";
}

加载单个用户

$sql = 'SELECT * FROM user WHERE id = 1';
$result = $conn->query($sql);

if ($row = $result->fetch_assoc()) {
   $user = new User($row);
} else {
   exit('User ID does not exist');
}

// echo the user's ID and name
echo $user->getId();
echo ' - ';
echo $user->getName();

资源
Laracasts - https://laracasts.com/series/object-oriented-bootcamp-in-php
搜索 PHP 面向对象编程解释 - https://www.google.co.uk/search?q=php+oop+explained


我非常感激,Steve,而且很高兴我不是唯一一个这样的人! - danjbh

3
<?php

class user {

    // Get users ID
    function get_user_id() {

        global $conn;
        $data = array();
        $sql = 'SELECT id FROM user';
        $result = $conn->query($sql);

        if ($result->num_rows > 0) {
            while ($row = $result->fetch_assoc()) {
                $data[] = $row['id'] . ', ';
            }
        }
        return $data;
    }

    // Get users name
    function get_user_name() {
        global $conn;
        $data = array();
        $sql = 'SELECT name FROM user';
        $result = $conn->query($sql);

        if ($result->num_rows > 0) {

            while ($row = $result->fetch_assoc()) {
                $data[] = $row['name'] . ', ';
            }
        }
        return $data;
    }
}

$userId = new user;

$userName = new user;

// all user ids
$all_ids = $userId->get_user_id();

echo '<pre>';
print_r($all_ids);

// all user name 
$all_name = $userId->get_user_name();
echo '<pre>';
print_r($all_name);`enter code here`

Check first response from both function after use if condition

2
你正在将对象与数字1进行比较,而不是函数get_user_id()返回的值。

因此,应该使用

         <?php $userId->get_user_id(); ?>
         <?php $userName->get_user_name(); ?>

尝试

         <?php $id=$userId->get_user_id(); ?>
         <?php $name= $userName->get_user_name(); ?>

然后放入您的条件。
  if($id > 1){
     echo $name;
  } else {
  echo 'not working';
 }

我建议您使用return语句替换echo。


2

将你的类作为一个对象进行调用

$userid = user(); $username = user();

你也可以尝试像这样

class user
{

    // Get users ID
    function get_user_id($id = "")
    {
        global $conn;

        // check if id is empty or not
        if(!empty($id)) {
            $sql = 'SELECT id FROM users WHERE id = '.$id;
        }else{
            $sql = 'SELECT id FROM users';
        }
        $result = $conn->query($sql);

        if ($result->num_rows > 0) {

            while ($row = $result->fetch_assoc() ){
                echo $row['id'] . ', '; }

        }
    }

    // Get users name
    function get_user_name($name = "")
    {
        global $conn;

        // check if name is empty or not
        if(!empty($name)) {
            $sql = 'SELECT name FROM user WHERE name = '.$name;
        }else{
            $sql = 'SELECT name FROM user';
        }

        $result = $conn->query($sql);

        if ($result->num_rows > 0) {

            while ($row = $result->fetch_assoc() ){
                echo $row['name'] . ', ';   }

        }
    }

}

    $userId = new user();
    $userName = new user();

    $userId->get_user_id(1);
    $userName->get_user_name();

    echo $userId;
    echo $userName;

请确保在使用前对id和name进行过滤处理


0

get_user_idget_user_name 方法中,请返回 $row = $result->fetch_assoc(); ,这样值就会存储在 $userId$userName 中,你就可以访问它们了。

目前你没有返回任何东西,所以 $user_id 的值为 null,所以它总是进入 else 条件。

例子

function get_user_id()
    {

        global $conn;
        $sql = 'SELECT id FROM user';
        $result = $conn->query($sql);

        if ($result->num_rows > 0) {
            $value = '';

            while ($row = $result->fetch_assoc() ){
                $value .= $row['id'] . ', ';
            }

           return $value;
        }
    }

这并不完全正确,我确实得到了结果,但是它们不在失败的参数中。 - danjbh
我认为这个可以帮助你,再检查一遍。 - Garvit Joshi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接