Bird
Raised Fist0
PHPprogramming~5 mins

DNF types (Disjunctive Normal Form) in PHP - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is Disjunctive Normal Form (DNF) in logic?
DNF is a way to write logical expressions as an OR of ANDs. Each AND group contains only variables or their negations, and the whole expression is a combination of these groups connected by OR.
Click to reveal answer
beginner
How can DNF be useful in programming?
DNF helps simplify complex logical conditions by breaking them into simpler parts. This makes it easier to evaluate, optimize, or convert logic into code like PHP if-statements.
Click to reveal answer
beginner
In PHP, how would you represent a DNF expression like (A AND B) OR (NOT C AND D)?
You can use boolean operators: ($A && $B) || (!$C && $D). This matches the DNF structure of OR between AND groups.
Click to reveal answer
intermediate
What does it mean if a logical expression is not in DNF?
It means the expression might have ORs inside ANDs or other complex nesting. DNF requires the top-level operator to be OR, with AND groups inside.
Click to reveal answer
intermediate
Why might converting to DNF cause an expression to grow larger?
Because distributing AND over OR can duplicate parts of the expression, making it longer and more complex, especially with many variables.
Click to reveal answer
Which of the following is a valid DNF expression?
AA OR (B AND (C OR D))
BA AND (B OR C)
C(A AND B) OR (C AND NOT D)
DNOT (A OR B)
In PHP, which operator represents logical AND?
A||
B&&
C!
D==
What does the 'NOT' operator do in logical expressions?
ANegates or reverses the truth value
BCombines two expressions with OR
CCombines two expressions with AND
DChecks equality
Why is DNF useful in programming?
AIt simplifies evaluation by standardizing structure
BIt makes expressions harder to read
CIt removes all negations
DIt converts expressions to numbers
What happens when you convert a complex expression to DNF?
AIt always becomes shorter
BIt removes all variables
CIt becomes a single variable
DIt may become longer due to distribution
Explain what Disjunctive Normal Form (DNF) is and why it is useful in programming.
Think about how logic can be broken into simpler parts.
You got /3 concepts.
    Describe how you would write a DNF logical expression in PHP code.
    Remember PHP boolean operators.
    You got /4 concepts.

      Practice

      (1/5)
      1.

      What does a Disjunctive Normal Form (DNF) type represent in PHP?

      easy
      A. A type that disables type checking
      B. A type that combines OR (union) and AND (intersection) conditions
      C. A type that restricts variables to integers only
      D. A type that only allows a single data type

      Solution

      1. Step 1: Understand DNF type concept

        DNF types combine multiple conditions using OR (union) and AND (intersection) to specify allowed types.
      2. Step 2: Compare options with definition

        Only the type that combines OR (union) and AND (intersection) conditions correctly describes this combination of OR and AND conditions in PHP types.
      3. Final Answer:

        A type that combines OR (union) and AND (intersection) conditions -> Option B
      4. Quick Check:

        DNF types = OR + AND conditions [OK]
      Hint: DNF means combining OR and AND in types [OK]
      Common Mistakes:
      • Thinking DNF only means union types
      • Confusing DNF with simple single types
      • Assuming DNF disables type checks
      2.

      Which of the following is the correct PHP syntax for a DNF type combining union and intersection?

      function example( /* type here */ $param) {}
      easy
      A. int&float&Serializable
      B. int&float|Serializable
      C. int|float|Serializable
      D. int|float&Serializable

      Solution

      1. Step 1: Recall PHP DNF syntax rules

        PHP uses | for union (OR) and & for intersection (AND). Intersection has higher precedence, so int|float&Serializable means int OR (float AND Serializable).
      2. Step 2: Analyze each option

        int|float&Serializable correctly uses union and intersection combined. int&float|Serializable misplaces operators, C uses only union, D uses only intersection.
      3. Final Answer:

        int|float&Serializable -> Option D
      4. Quick Check:

        Union (|) and intersection (&) combined correctly = int|float&Serializable [OK]
      Hint: Use | for OR, & for AND in PHP types [OK]
      Common Mistakes:
      • Mixing order of | and & operators
      • Using only unions or only intersections
      • Writing invalid syntax like &| or |&
      3.

      What is the output of this PHP code snippet?

      interface A {} 
      interface B {} 
      class C implements A, B {} 
      function test(A|B&object $param): string { 
        return $param instanceof B ? 'Yes' : 'No'; 
      } 
      $obj = new C(); 
      echo test($obj);
      medium
      A. Fatal error
      B. No
      C. Yes
      D. Empty output

      Solution

      1. Step 1: Understand the type declaration

        The parameter type is A OR (B AND object). Class C implements both A and B, so it matches the type.
      2. Step 2: Evaluate the instanceof check

        $obj is instance of B, so the ternary returns 'Yes'.
      3. Final Answer:

        Yes -> Option C
      4. Quick Check:

        Object matches B, so output is 'Yes' [OK]
      Hint: Check instanceof for intersection parts in DNF types [OK]
      Common Mistakes:
      • Assuming type mismatch causes error
      • Ignoring intersection precedence
      • Thinking output is 'No' without checking instanceof
      4.

      Identify the error in this PHP function using DNF types:

      function checkType(int|float&Countable $value) { 
        return is_countable($value); 
      }
      medium
      A. Invalid use of & with float, which is not an object
      B. Missing return type declaration
      C. is_countable() cannot be used here
      D. int and float cannot be unioned

      Solution

      1. Step 1: Analyze intersection with primitive types

        float is a primitive type and cannot be combined with & Countable (an interface) because & requires object types.
      2. Step 2: Confirm error cause

        Using & between float and Countable causes a type error since float is not an object.
      3. Final Answer:

        Invalid use of & with float, which is not an object -> Option A
      4. Quick Check:

        Intersection requires objects, float is primitive [OK]
      Hint: Intersection (&) only works with object types [OK]
      Common Mistakes:
      • Thinking primitives can be intersected with interfaces
      • Ignoring PHP type system rules
      • Assuming is_countable() causes error
      5.

      Given these interfaces and classes:

      interface X {} 
      interface Y {} 
      class A implements X {} 
      class B implements Y {} 
      class C implements X, Y {}

      Which DNF type correctly accepts objects that implement either X alone, or both X and Y together?

      hard
      A. X|(X&Y)
      B. X&Y|Y
      C. X|Y
      D. (X|Y)&Y

      Solution

      1. Step 1: Understand the requirement

        Accept objects that implement X alone OR both X and Y together.
      2. Step 2: Translate to DNF

        This means either X alone OR (X AND Y). X|(X&Y) expresses this as X|(X&Y).
      3. Step 3: Check other options

        X&Y|Y includes Y alone, which is incorrect. X|Y accepts X or Y alone, too broad. (X|Y)&Y includes Y alone, which is incorrect.
      4. Final Answer:

        X|(X&Y) -> Option A
      5. Quick Check:

        DNF matches X alone or X and Y together = X|(X&Y) [OK]
      Hint: Use union of X and intersection X&Y for this case [OK]
      Common Mistakes:
      • Choosing simple union X|Y which is too broad
      • Misplacing parentheses changing logic
      • Confusing intersection and union precedence
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard